From 280a8a354a39c4b8e813699496752d91599dca35 Mon Sep 17 00:00:00 2001 From: achingbrain Date: Sat, 2 Dec 2023 07:12:34 +0000 Subject: [PATCH 1/2] experiment: alloc uninitialised buffer for incoming decrypted data `@chainsafe/noise` has an optimisation where the buffer containing incoming encrypted data is reused for the decrypted data to avoid allocing a new buffer. This data arrives as a `Uint8ArrayList` so where it spans more than one buffer it can involve copying the data first, only to then overwrite it. This experiment tests: - v1.0: default behaviour - v1.0-noise-alloc: use alloc unsafe to allocate a new unitialised buffer - v1.0-noise-alloc-smart: only alloc unsafe if the list contains more than one buffer --- perf/impl/Makefile | 16 +- .../js-libp2p/v1.0-noise-alloc-smart/Makefile | 12 + .../js-libp2p/v1.0-noise-alloc-smart/index.js | 112 +++ .../noise/dist/index.min.js | 51 + .../noise/dist/src/@types/basic.d.ts | 5 + .../noise/dist/src/@types/basic.d.ts.map | 1 + .../noise/dist/src/@types/basic.js | 2 + .../noise/dist/src/@types/basic.js.map | 1 + .../dist/src/@types/handshake-interface.d.ts | 15 + .../src/@types/handshake-interface.d.ts.map | 1 + .../dist/src/@types/handshake-interface.js | 2 + .../src/@types/handshake-interface.js.map | 1 + .../noise/dist/src/@types/handshake.d.ts | 41 + .../noise/dist/src/@types/handshake.d.ts.map | 1 + .../noise/dist/src/@types/handshake.js | 2 + .../noise/dist/src/@types/handshake.js.map | 1 + .../noise/dist/src/@types/libp2p.d.ts | 10 + .../noise/dist/src/@types/libp2p.d.ts.map | 1 + .../noise/dist/src/@types/libp2p.js | 2 + .../noise/dist/src/@types/libp2p.js.map | 1 + .../noise/dist/src/constants.d.ts | 4 + .../noise/dist/src/constants.d.ts.map | 1 + .../noise/dist/src/constants.js | 4 + .../noise/dist/src/constants.js.map | 1 + .../noise/dist/src/crypto.d.ts | 14 + .../noise/dist/src/crypto.d.ts.map | 1 + .../noise/dist/src/crypto.js | 2 + .../noise/dist/src/crypto.js.map | 1 + .../noise/dist/src/crypto/index.browser.d.ts | 2 + .../dist/src/crypto/index.browser.d.ts.map | 1 + .../noise/dist/src/crypto/index.browser.js | 3 + .../dist/src/crypto/index.browser.js.map | 1 + .../noise/dist/src/crypto/index.d.ts | 3 + .../noise/dist/src/crypto/index.d.ts.map | 1 + .../noise/dist/src/crypto/index.js | 186 ++++ .../noise/dist/src/crypto/index.js.map | 1 + .../noise/dist/src/crypto/js.d.ts | 3 + .../noise/dist/src/crypto/js.d.ts.map | 1 + .../noise/dist/src/crypto/js.js | 43 + .../noise/dist/src/crypto/js.js.map | 1 + .../noise/dist/src/crypto/streaming.d.ts | 7 + .../noise/dist/src/crypto/streaming.d.ts.map | 1 + .../noise/dist/src/crypto/streaming.js | 60 ++ .../noise/dist/src/crypto/streaming.js.map | 1 + .../noise/dist/src/encoder.d.ts | 16 + .../noise/dist/src/encoder.d.ts.map | 1 + .../noise/dist/src/encoder.js | 58 ++ .../noise/dist/src/encoder.js.map | 1 + .../noise/dist/src/errors.d.ts | 11 + .../noise/dist/src/errors.d.ts.map | 1 + .../noise/dist/src/errors.js | 17 + .../noise/dist/src/errors.js.map | 1 + .../noise/dist/src/handshake-xx.d.ts | 36 + .../noise/dist/src/handshake-xx.d.ts.map | 1 + .../noise/dist/src/handshake-xx.js | 142 +++ .../noise/dist/src/handshake-xx.js.map | 1 + .../src/handshakes/abstract-handshake.d.ts | 39 + .../handshakes/abstract-handshake.d.ts.map | 1 + .../dist/src/handshakes/abstract-handshake.js | 142 +++ .../src/handshakes/abstract-handshake.js.map | 1 + .../noise/dist/src/handshakes/xx.d.ts | 18 + .../noise/dist/src/handshakes/xx.d.ts.map | 1 + .../noise/dist/src/handshakes/xx.js | 162 ++++ .../noise/dist/src/handshakes/xx.js.map | 1 + .../noise/dist/src/index.d.ts | 11 + .../noise/dist/src/index.d.ts.map | 1 + .../noise/dist/src/index.js | 6 + .../noise/dist/src/index.js.map | 1 + .../noise/dist/src/logger.d.ts | 10 + .../noise/dist/src/logger.d.ts.map | 1 + .../noise/dist/src/logger.js | 46 + .../noise/dist/src/logger.js.map | 1 + .../noise/dist/src/metrics.d.ts | 4 + .../noise/dist/src/metrics.d.ts.map | 1 + .../noise/dist/src/metrics.js | 20 + .../noise/dist/src/metrics.js.map | 1 + .../noise/dist/src/noise.d.ts | 55 ++ .../noise/dist/src/noise.d.ts.map | 1 + .../noise/dist/src/noise.js | 138 +++ .../noise/dist/src/noise.js.map | 1 + .../noise/dist/src/nonce.d.ts | 18 + .../noise/dist/src/nonce.d.ts.map | 1 + .../noise/dist/src/nonce.js | 42 + .../noise/dist/src/nonce.js.map | 1 + .../noise/dist/src/proto/payload.d.ts | 21 + .../noise/dist/src/proto/payload.d.ts.map | 1 + .../noise/dist/src/proto/payload.js | 119 +++ .../noise/dist/src/proto/payload.js.map | 1 + .../noise/dist/src/utils.d.ts | 21 + .../noise/dist/src/utils.d.ts.map | 1 + .../noise/dist/src/utils.js | 79 ++ .../noise/dist/src/utils.js.map | 1 + .../noise/dist/tsconfig.tsbuildinfo | 1 + .../v1.0-noise-alloc-smart/noise/package.json | 93 ++ .../noise/src/@types/basic.ts | 5 + .../noise/src/@types/handshake-interface.ts | 12 + .../noise/src/@types/handshake.ts | 49 + .../noise/src/@types/libp2p.ts | 10 + .../noise/src/constants.ts | 4 + .../noise/src/crypto.ts | 17 + .../noise/src/crypto/index.browser.ts | 3 + .../noise/src/crypto/index.ts | 217 +++++ .../noise/src/crypto/js.ts | 58 ++ .../noise/src/crypto/streaming.ts | 72 ++ .../noise/src/encoder.ts | 73 ++ .../noise/src/errors.ts | 21 + .../noise/src/handshake-xx.ts | 182 ++++ .../src/handshakes/abstract-handshake.ts | 185 ++++ .../noise/src/handshakes/xx.ts | 186 ++++ .../v1.0-noise-alloc-smart/noise/src/index.ts | 15 + .../noise/src/logger.ts | 57 ++ .../noise/src/metrics.ts | 32 + .../v1.0-noise-alloc-smart/noise/src/noise.ts | 202 ++++ .../v1.0-noise-alloc-smart/noise/src/nonce.ts | 50 + .../noise/src/proto/payload.proto | 11 + .../noise/src/proto/payload.ts | 152 +++ .../v1.0-noise-alloc-smart/noise/src/utils.ts | 119 +++ .../v1.0-noise-alloc-smart/package-lock.json | 911 ++++++++++++++++++ .../v1.0-noise-alloc-smart/package.json | 13 + .../js-libp2p/v1.0-noise-alloc-smart/perf | 45 + perf/impl/js-libp2p/v1.0-noise-alloc/Makefile | 12 + perf/impl/js-libp2p/v1.0-noise-alloc/index.js | 112 +++ .../v1.0-noise-alloc/noise/dist/index.min.js | 51 + .../noise/dist/src/@types/basic.d.ts | 5 + .../noise/dist/src/@types/basic.d.ts.map | 1 + .../noise/dist/src/@types/basic.js | 2 + .../noise/dist/src/@types/basic.js.map | 1 + .../dist/src/@types/handshake-interface.d.ts | 15 + .../src/@types/handshake-interface.d.ts.map | 1 + .../dist/src/@types/handshake-interface.js | 2 + .../src/@types/handshake-interface.js.map | 1 + .../noise/dist/src/@types/handshake.d.ts | 41 + .../noise/dist/src/@types/handshake.d.ts.map | 1 + .../noise/dist/src/@types/handshake.js | 2 + .../noise/dist/src/@types/handshake.js.map | 1 + .../noise/dist/src/@types/libp2p.d.ts | 10 + .../noise/dist/src/@types/libp2p.d.ts.map | 1 + .../noise/dist/src/@types/libp2p.js | 2 + .../noise/dist/src/@types/libp2p.js.map | 1 + .../noise/dist/src/constants.d.ts | 4 + .../noise/dist/src/constants.d.ts.map | 1 + .../noise/dist/src/constants.js | 4 + .../noise/dist/src/constants.js.map | 1 + .../noise/dist/src/crypto.d.ts | 14 + .../noise/dist/src/crypto.d.ts.map | 1 + .../v1.0-noise-alloc/noise/dist/src/crypto.js | 2 + .../noise/dist/src/crypto.js.map | 1 + .../noise/dist/src/crypto/index.browser.d.ts | 2 + .../dist/src/crypto/index.browser.d.ts.map | 1 + .../noise/dist/src/crypto/index.browser.js | 3 + .../dist/src/crypto/index.browser.js.map | 1 + .../noise/dist/src/crypto/index.d.ts | 3 + .../noise/dist/src/crypto/index.d.ts.map | 1 + .../noise/dist/src/crypto/index.js | 186 ++++ .../noise/dist/src/crypto/index.js.map | 1 + .../noise/dist/src/crypto/js.d.ts | 3 + .../noise/dist/src/crypto/js.d.ts.map | 1 + .../noise/dist/src/crypto/js.js | 43 + .../noise/dist/src/crypto/js.js.map | 1 + .../noise/dist/src/crypto/streaming.d.ts | 7 + .../noise/dist/src/crypto/streaming.d.ts.map | 1 + .../noise/dist/src/crypto/streaming.js | 53 + .../noise/dist/src/crypto/streaming.js.map | 1 + .../noise/dist/src/encoder.d.ts | 16 + .../noise/dist/src/encoder.d.ts.map | 1 + .../noise/dist/src/encoder.js | 58 ++ .../noise/dist/src/encoder.js.map | 1 + .../noise/dist/src/errors.d.ts | 11 + .../noise/dist/src/errors.d.ts.map | 1 + .../v1.0-noise-alloc/noise/dist/src/errors.js | 17 + .../noise/dist/src/errors.js.map | 1 + .../noise/dist/src/handshake-xx.d.ts | 36 + .../noise/dist/src/handshake-xx.d.ts.map | 1 + .../noise/dist/src/handshake-xx.js | 142 +++ .../noise/dist/src/handshake-xx.js.map | 1 + .../src/handshakes/abstract-handshake.d.ts | 39 + .../handshakes/abstract-handshake.d.ts.map | 1 + .../dist/src/handshakes/abstract-handshake.js | 142 +++ .../src/handshakes/abstract-handshake.js.map | 1 + .../noise/dist/src/handshakes/xx.d.ts | 18 + .../noise/dist/src/handshakes/xx.d.ts.map | 1 + .../noise/dist/src/handshakes/xx.js | 162 ++++ .../noise/dist/src/handshakes/xx.js.map | 1 + .../noise/dist/src/index.d.ts | 11 + .../noise/dist/src/index.d.ts.map | 1 + .../v1.0-noise-alloc/noise/dist/src/index.js | 6 + .../noise/dist/src/index.js.map | 1 + .../noise/dist/src/logger.d.ts | 10 + .../noise/dist/src/logger.d.ts.map | 1 + .../v1.0-noise-alloc/noise/dist/src/logger.js | 46 + .../noise/dist/src/logger.js.map | 1 + .../noise/dist/src/metrics.d.ts | 4 + .../noise/dist/src/metrics.d.ts.map | 1 + .../noise/dist/src/metrics.js | 20 + .../noise/dist/src/metrics.js.map | 1 + .../noise/dist/src/noise.d.ts | 55 ++ .../noise/dist/src/noise.d.ts.map | 1 + .../v1.0-noise-alloc/noise/dist/src/noise.js | 138 +++ .../noise/dist/src/noise.js.map | 1 + .../noise/dist/src/nonce.d.ts | 18 + .../noise/dist/src/nonce.d.ts.map | 1 + .../v1.0-noise-alloc/noise/dist/src/nonce.js | 42 + .../noise/dist/src/nonce.js.map | 1 + .../noise/dist/src/proto/payload.d.ts | 21 + .../noise/dist/src/proto/payload.d.ts.map | 1 + .../noise/dist/src/proto/payload.js | 119 +++ .../noise/dist/src/proto/payload.js.map | 1 + .../noise/dist/src/utils.d.ts | 21 + .../noise/dist/src/utils.d.ts.map | 1 + .../v1.0-noise-alloc/noise/dist/src/utils.js | 79 ++ .../noise/dist/src/utils.js.map | 1 + .../noise/dist/tsconfig.tsbuildinfo | 1 + .../v1.0-noise-alloc/noise/package.json | 93 ++ .../noise/src/@types/basic.ts | 5 + .../noise/src/@types/handshake-interface.ts | 12 + .../noise/src/@types/handshake.ts | 49 + .../noise/src/@types/libp2p.ts | 10 + .../v1.0-noise-alloc/noise/src/constants.ts | 4 + .../v1.0-noise-alloc/noise/src/crypto.ts | 17 + .../noise/src/crypto/index.browser.ts | 3 + .../noise/src/crypto/index.ts | 217 +++++ .../v1.0-noise-alloc/noise/src/crypto/js.ts | 58 ++ .../noise/src/crypto/streaming.ts | 63 ++ .../v1.0-noise-alloc/noise/src/encoder.ts | 73 ++ .../v1.0-noise-alloc/noise/src/errors.ts | 21 + .../noise/src/handshake-xx.ts | 182 ++++ .../src/handshakes/abstract-handshake.ts | 185 ++++ .../noise/src/handshakes/xx.ts | 186 ++++ .../v1.0-noise-alloc/noise/src/index.ts | 15 + .../v1.0-noise-alloc/noise/src/logger.ts | 57 ++ .../v1.0-noise-alloc/noise/src/metrics.ts | 32 + .../v1.0-noise-alloc/noise/src/noise.ts | 202 ++++ .../v1.0-noise-alloc/noise/src/nonce.ts | 50 + .../noise/src/proto/payload.proto | 11 + .../noise/src/proto/payload.ts | 152 +++ .../v1.0-noise-alloc/noise/src/utils.ts | 119 +++ .../v1.0-noise-alloc/package-lock.json | 911 ++++++++++++++++++ .../js-libp2p/v1.0-noise-alloc/package.json | 13 + perf/impl/js-libp2p/v1.0-noise-alloc/perf | 45 + perf/impl/js-libp2p/v1.0/package-lock.json | 538 +++-------- perf/impl/js-libp2p/v1.0/package.json | 10 +- perf/runner/src/versions.ts | 14 +- 242 files changed, 9471 insertions(+), 401 deletions(-) create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/Makefile create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/index.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/index.min.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/basic.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/basic.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/basic.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/basic.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake-interface.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake-interface.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake-interface.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake-interface.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/libp2p.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/libp2p.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/libp2p.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/libp2p.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/constants.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/constants.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/constants.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/constants.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.browser.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.browser.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.browser.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.browser.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/js.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/js.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/js.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/js.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/streaming.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/streaming.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/streaming.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/streaming.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/encoder.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/encoder.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/encoder.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/encoder.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/errors.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/errors.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/errors.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/errors.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshake-xx.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshake-xx.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshake-xx.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshake-xx.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/abstract-handshake.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/abstract-handshake.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/abstract-handshake.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/abstract-handshake.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/xx.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/xx.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/xx.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/xx.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/index.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/index.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/index.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/index.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/logger.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/logger.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/logger.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/logger.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/metrics.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/metrics.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/metrics.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/metrics.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/noise.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/noise.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/noise.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/noise.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/nonce.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/nonce.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/nonce.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/nonce.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/proto/payload.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/proto/payload.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/proto/payload.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/proto/payload.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/utils.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/utils.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/utils.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/utils.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/tsconfig.tsbuildinfo create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/package.json create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/@types/basic.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/@types/handshake-interface.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/@types/handshake.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/@types/libp2p.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/constants.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/crypto.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/crypto/index.browser.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/crypto/index.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/crypto/js.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/crypto/streaming.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/encoder.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/errors.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/handshake-xx.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/handshakes/abstract-handshake.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/handshakes/xx.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/index.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/logger.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/metrics.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/noise.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/nonce.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/proto/payload.proto create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/proto/payload.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/utils.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/package-lock.json create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc-smart/package.json create mode 100755 perf/impl/js-libp2p/v1.0-noise-alloc-smart/perf create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/Makefile create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/index.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/index.min.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/basic.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/basic.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/basic.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/basic.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake-interface.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake-interface.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake-interface.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake-interface.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/libp2p.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/libp2p.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/libp2p.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/libp2p.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/constants.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/constants.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/constants.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/constants.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.browser.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.browser.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.browser.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.browser.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/js.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/js.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/js.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/js.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/streaming.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/streaming.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/streaming.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/streaming.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/encoder.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/encoder.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/encoder.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/encoder.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/errors.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/errors.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/errors.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/errors.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshake-xx.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshake-xx.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshake-xx.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshake-xx.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/abstract-handshake.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/abstract-handshake.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/abstract-handshake.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/abstract-handshake.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/xx.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/xx.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/xx.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/xx.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/index.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/index.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/index.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/index.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/logger.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/logger.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/logger.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/logger.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/metrics.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/metrics.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/metrics.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/metrics.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/noise.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/noise.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/noise.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/noise.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/nonce.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/nonce.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/nonce.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/nonce.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/proto/payload.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/proto/payload.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/proto/payload.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/proto/payload.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/utils.d.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/utils.d.ts.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/utils.js create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/utils.js.map create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/tsconfig.tsbuildinfo create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/package.json create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/@types/basic.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/@types/handshake-interface.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/@types/handshake.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/@types/libp2p.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/constants.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/crypto.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/crypto/index.browser.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/crypto/index.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/crypto/js.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/crypto/streaming.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/encoder.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/errors.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/handshake-xx.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/handshakes/abstract-handshake.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/handshakes/xx.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/index.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/logger.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/metrics.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/noise.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/nonce.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/proto/payload.proto create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/proto/payload.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/utils.ts create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/package-lock.json create mode 100644 perf/impl/js-libp2p/v1.0-noise-alloc/package.json create mode 100755 perf/impl/js-libp2p/v1.0-noise-alloc/perf diff --git a/perf/impl/Makefile b/perf/impl/Makefile index e274d58dc..103d54cb2 100644 --- a/perf/impl/Makefile +++ b/perf/impl/Makefile @@ -5,14 +5,14 @@ QUIC_GO_SUBDIRS := $(wildcard quic-go/*/.) JS_SUBDIRS := $(wildcard js-libp2p/*/.) all: $(RUST_SUBDIRS) $(GO_SUBDIRS) $(HTTPS_SUBDIRS) $(QUIC_GO_SUBDIRS) $(JS_SUBDIRS) -$(RUST_SUBDIRS): - $(MAKE) -C $@ -$(GO_SUBDIRS): - $(MAKE) -C $@ -$(HTTPS_SUBDIRS): - $(MAKE) -C $@ -$(QUIC_GO_SUBDIRS): - $(MAKE) -C $@ +# $(RUST_SUBDIRS): +# $(MAKE) -C $@ +# $(GO_SUBDIRS): +# $(MAKE) -C $@ +# $(HTTPS_SUBDIRS): +# $(MAKE) -C $@ +# $(QUIC_GO_SUBDIRS): +# $(MAKE) -C $@ $(JS_SUBDIRS): $(MAKE) -C $@ diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/Makefile b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/Makefile new file mode 100644 index 000000000..a1e077cdc --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/Makefile @@ -0,0 +1,12 @@ +DOCKER_IMAGE := node:20-alpine +DOCKER_RUN := docker run --rm -v "$(shell pwd)":/usr/src/myapp -w /usr/src/myapp $(DOCKER_IMAGE) + +all: perf + +perf: + $(DOCKER_RUN) npm ci + +clean: + rm -rf node_modules + +.PHONY: all clean perf diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/index.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/index.js new file mode 100644 index 000000000..0b432a9c5 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/index.js @@ -0,0 +1,112 @@ +import { noise } from '@chainsafe/libp2p-noise' +import { yamux } from '@chainsafe/libp2p-yamux' +import { tcp } from '@libp2p/tcp' +import { multiaddr } from '@multiformats/multiaddr' +import { createLibp2p } from 'libp2p' +import { perf } from '@libp2p/perf' +import { parseArgs } from 'node:util' + +const argv = parseArgs({ + options: { + 'run-server': { + type: 'string', + default: 'false' + }, + 'server-address': { + type: 'string' + }, + transport: { + type: 'string', + default: 'tcp' + }, + 'upload-bytes': { + type: 'string', + default: '0' + }, + 'download-bytes': { + type: 'string', + default: '0' + } + } +}) + +/** + * @param {boolean} runServer + * @param {string} serverIpAddress + * @param {string} transport + * @param {number} uploadBytes + * @param {number} downloadBytes + */ +export async function main (runServer, serverIpAddress, transport, uploadBytes, downloadBytes) { + const { host, port } = splitHostPort(serverIpAddress) + + const config = { + //peerId, + transports: [tcp({ + socket: { + noDelay: true + }, + server: { + noDelay: true + } + })], + streamMuxers: [yamux()], + connectionEncryption: [ + noise() + ], + connectionManager: { + minConnections: 0 + }, + services: { + perf: perf() + } + } + + if (runServer) { + Object.assign(config, { + addresses: { + listen: [ + // #TODO: right now we only support tcp + `/ip4/${host}/tcp/${port}` + ] + } + }) + } + + const node = await createLibp2p(config) + + await node.start() + + if (!runServer) { + for await (const output of node.services.perf.measurePerformance(multiaddr(`/ip4/${host}/tcp/${port}`), uploadBytes, downloadBytes)) { + // eslint-disable-next-line no-console + console.log(JSON.stringify(output)) + } + + await node.stop() + } +} + +/** + * @param {string} address + * @returns { host: string, port?: string } + */ +function splitHostPort (address) { + try { + const parts = address.split(':') + const host = parts[0] + const port = parts[1] + return { + host, + port + } + } catch (error) { + throw Error('Invalid server address') + } +} + +main(argv.values['run-server'] === 'true', argv.values['server-address'], argv.values.transport, Number(argv.values['upload-bytes']), Number(argv.values['download-bytes'])).catch((err) => { + // eslint-disable-next-line no-console + console.error(err) + process.exit(1) +}) diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/index.min.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/index.min.js new file mode 100644 index 000000000..1e19a6a0d --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/index.min.js @@ -0,0 +1,51 @@ +(function (root, factory) {(typeof module === 'object' && module.exports) ? module.exports = factory() : root.ChainsafeLibp2PNoise = factory()}(typeof self !== 'undefined' ? self : this, function () { +"use strict";var ChainsafeLibp2PNoise=(()=>{var su=Object.create;var Nn=Object.defineProperty;var ou=Object.getOwnPropertyDescriptor;var au=Object.getOwnPropertyNames;var cu=Object.getPrototypeOf,fu=Object.prototype.hasOwnProperty;var pt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Lt=(e,t)=>{for(var r in t)Nn(e,r,{get:t[r],enumerable:!0})},sa=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of au(t))!fu.call(e,i)&&i!==r&&Nn(e,i,{get:()=>t[i],enumerable:!(n=ou(t,i))||n.enumerable});return e};var Gt=(e,t,r)=>(r=e!=null?su(cu(e)):{},sa(t||!e||!e.__esModule?Nn(r,"default",{value:e,enumerable:!0}):r,e)),uu=e=>sa(Nn({},"__esModule",{value:!0}),e);var ha=pt((k1,ua)=>{"use strict";function fa(e,t){for(let r in t)Object.defineProperty(e,r,{value:t[r],enumerable:!0,configurable:!0});return e}function mu(e,t,r){if(!e||typeof e=="string")throw new TypeError("Please pass an Error to err-code");r||(r={}),typeof t=="object"&&(r=t,t=""),t&&(r.code=t);try{return fa(e,r)}catch{r.message=e.message,r.stack=e.stack;let i=function(){};return i.prototype=Object.create(Object.getPrototypeOf(e)),fa(new i,r)}}ua.exports=mu});var ht=pt((Fg,u0)=>{u0.exports={options:{usePureJavaScript:!1}}});var p0=pt((Hg,l0)=>{var Is={};l0.exports=Is;var h0={};Is.encode=function(e,t,r){if(typeof t!="string")throw new TypeError('"alphabet" must be a string.');if(r!==void 0&&typeof r!="number")throw new TypeError('"maxline" must be a number.');var n="";if(!(e instanceof Uint8Array))n=Yh(e,t);else{var i=0,s=t.length,o=t.charAt(0),a=[0];for(i=0;i0;)a.push(f%s),f=f/s|0}for(i=0;e[i]===0&&i=0;--i)n+=t[a[i]]}if(r){var u=new RegExp(".{1,"+r+"}","g");n=n.match(u).join(`\r +`)}return n};Is.decode=function(e,t){if(typeof e!="string")throw new TypeError('"input" must be a string.');if(typeof t!="string")throw new TypeError('"alphabet" must be a string.');var r=h0[t];if(!r){r=h0[t]=[];for(var n=0;n>=8;for(;f>0;)o.push(f&255),f>>=8}for(var u=0;e[u]===s&&u0;)s.push(a%n),a=a/n|0}var c="";for(r=0;e.at(r)===0&&r=0;--r)c+=t[s[r]];return c}});var Ct=pt((qg,g0)=>{var d0=ht(),y0=p0(),b=g0.exports=d0.util=d0.util||{};(function(){if(typeof process<"u"&&process.nextTick&&!process.browser){b.nextTick=process.nextTick,typeof setImmediate=="function"?b.setImmediate=setImmediate:b.setImmediate=b.nextTick;return}if(typeof setImmediate=="function"){b.setImmediate=function(){return setImmediate.apply(void 0,arguments)},b.nextTick=function(a){return setImmediate(a)};return}if(b.setImmediate=function(a){setTimeout(a,0)},typeof window<"u"&&typeof window.postMessage=="function"){let a=function(c){if(c.source===window&&c.data===e){c.stopPropagation();var f=t.slice();t.length=0,f.forEach(function(u){u()})}};var o=a,e="forge.setImmediate",t=[];b.setImmediate=function(c){t.push(c),t.length===1&&window.postMessage(e,"*")},window.addEventListener("message",a,!0)}if(typeof MutationObserver<"u"){var r=Date.now(),n=!0,i=document.createElement("div"),t=[];new MutationObserver(function(){var c=t.slice();t.length=0,c.forEach(function(f){f()})}).observe(i,{attributes:!0});var s=b.setImmediate;b.setImmediate=function(c){Date.now()-r>15?(r=Date.now(),s(c)):(t.push(c),t.length===1&&i.setAttribute("a",n=!n))}}b.nextTick=b.setImmediate})();b.isNodejs=typeof process<"u"&&process.versions&&process.versions.node;b.globalScope=function(){return b.isNodejs?globalThis:typeof self>"u"?window:self}();b.isArray=Array.isArray||function(e){return Object.prototype.toString.call(e)==="[object Array]"};b.isArrayBuffer=function(e){return typeof ArrayBuffer<"u"&&e instanceof ArrayBuffer};b.isArrayBufferView=function(e){return e&&b.isArrayBuffer(e.buffer)&&e.byteLength!==void 0};function fn(e){if(!(e===8||e===16||e===24||e===32))throw new Error("Only 8, 16, 24, or 32 bits supported: "+e)}b.ByteBuffer=Ts;function Ts(e){if(this.data="",this.read=0,typeof e=="string")this.data=e;else if(b.isArrayBuffer(e)||b.isArrayBufferView(e))if(typeof Buffer<"u"&&e instanceof Buffer)this.data=e.toString("binary");else{var t=new Uint8Array(e);try{this.data=String.fromCharCode.apply(null,t)}catch{for(var r=0;rWh&&(this.data.substr(0,1),this._constructedStringLength=0)};b.ByteStringBuffer.prototype.length=function(){return this.data.length-this.read};b.ByteStringBuffer.prototype.isEmpty=function(){return this.length()<=0};b.ByteStringBuffer.prototype.putByte=function(e){return this.putBytes(String.fromCharCode(e))};b.ByteStringBuffer.prototype.fillWithByte=function(e,t){e=String.fromCharCode(e);for(var r=this.data;t>0;)t&1&&(r+=e),t>>>=1,t>0&&(e+=e);return this.data=r,this._optimizeConstructedString(t),this};b.ByteStringBuffer.prototype.putBytes=function(e){return this.data+=e,this._optimizeConstructedString(e.length),this};b.ByteStringBuffer.prototype.putString=function(e){return this.putBytes(b.encodeUtf8(e))};b.ByteStringBuffer.prototype.putInt16=function(e){return this.putBytes(String.fromCharCode(e>>8&255)+String.fromCharCode(e&255))};b.ByteStringBuffer.prototype.putInt24=function(e){return this.putBytes(String.fromCharCode(e>>16&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(e&255))};b.ByteStringBuffer.prototype.putInt32=function(e){return this.putBytes(String.fromCharCode(e>>24&255)+String.fromCharCode(e>>16&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(e&255))};b.ByteStringBuffer.prototype.putInt16Le=function(e){return this.putBytes(String.fromCharCode(e&255)+String.fromCharCode(e>>8&255))};b.ByteStringBuffer.prototype.putInt24Le=function(e){return this.putBytes(String.fromCharCode(e&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(e>>16&255))};b.ByteStringBuffer.prototype.putInt32Le=function(e){return this.putBytes(String.fromCharCode(e&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(e>>16&255)+String.fromCharCode(e>>24&255))};b.ByteStringBuffer.prototype.putInt=function(e,t){fn(t);var r="";do t-=8,r+=String.fromCharCode(e>>t&255);while(t>0);return this.putBytes(r)};b.ByteStringBuffer.prototype.putSignedInt=function(e,t){return e<0&&(e+=2<0);return t};b.ByteStringBuffer.prototype.getSignedInt=function(e){var t=this.getInt(e),r=2<=r&&(t-=r<<1),t};b.ByteStringBuffer.prototype.getBytes=function(e){var t;return e?(e=Math.min(this.length(),e),t=this.data.slice(this.read,this.read+e),this.read+=e):e===0?t="":(t=this.read===0?this.data:this.data.slice(this.read),this.clear()),t};b.ByteStringBuffer.prototype.bytes=function(e){return typeof e>"u"?this.data.slice(this.read):this.data.slice(this.read,this.read+e)};b.ByteStringBuffer.prototype.at=function(e){return this.data.charCodeAt(this.read+e)};b.ByteStringBuffer.prototype.setAt=function(e,t){return this.data=this.data.substr(0,this.read+e)+String.fromCharCode(t)+this.data.substr(this.read+e+1),this};b.ByteStringBuffer.prototype.last=function(){return this.data.charCodeAt(this.data.length-1)};b.ByteStringBuffer.prototype.copy=function(){var e=b.createBuffer(this.data);return e.read=this.read,e};b.ByteStringBuffer.prototype.compact=function(){return this.read>0&&(this.data=this.data.slice(this.read),this.read=0),this};b.ByteStringBuffer.prototype.clear=function(){return this.data="",this.read=0,this};b.ByteStringBuffer.prototype.truncate=function(e){var t=Math.max(0,this.length()-e);return this.data=this.data.substr(this.read,t),this.read=0,this};b.ByteStringBuffer.prototype.toHex=function(){for(var e="",t=this.read;t=e)return this;t=Math.max(t||this.growSize,e);var r=new Uint8Array(this.data.buffer,this.data.byteOffset,this.data.byteLength),n=new Uint8Array(this.length()+t);return n.set(r),this.data=new DataView(n.buffer),this};b.DataBuffer.prototype.putByte=function(e){return this.accommodate(1),this.data.setUint8(this.write++,e),this};b.DataBuffer.prototype.fillWithByte=function(e,t){this.accommodate(t);for(var r=0;r>8&65535),this.data.setInt8(this.write,e>>16&255),this.write+=3,this};b.DataBuffer.prototype.putInt32=function(e){return this.accommodate(4),this.data.setInt32(this.write,e),this.write+=4,this};b.DataBuffer.prototype.putInt16Le=function(e){return this.accommodate(2),this.data.setInt16(this.write,e,!0),this.write+=2,this};b.DataBuffer.prototype.putInt24Le=function(e){return this.accommodate(3),this.data.setInt8(this.write,e>>16&255),this.data.setInt16(this.write,e>>8&65535,!0),this.write+=3,this};b.DataBuffer.prototype.putInt32Le=function(e){return this.accommodate(4),this.data.setInt32(this.write,e,!0),this.write+=4,this};b.DataBuffer.prototype.putInt=function(e,t){fn(t),this.accommodate(t/8);do t-=8,this.data.setInt8(this.write++,e>>t&255);while(t>0);return this};b.DataBuffer.prototype.putSignedInt=function(e,t){return fn(t),this.accommodate(t/8),e<0&&(e+=2<0);return t};b.DataBuffer.prototype.getSignedInt=function(e){var t=this.getInt(e),r=2<=r&&(t-=r<<1),t};b.DataBuffer.prototype.getBytes=function(e){var t;return e?(e=Math.min(this.length(),e),t=this.data.slice(this.read,this.read+e),this.read+=e):e===0?t="":(t=this.read===0?this.data:this.data.slice(this.read),this.clear()),t};b.DataBuffer.prototype.bytes=function(e){return typeof e>"u"?this.data.slice(this.read):this.data.slice(this.read,this.read+e)};b.DataBuffer.prototype.at=function(e){return this.data.getUint8(this.read+e)};b.DataBuffer.prototype.setAt=function(e,t){return this.data.setUint8(e,t),this};b.DataBuffer.prototype.last=function(){return this.data.getUint8(this.write-1)};b.DataBuffer.prototype.copy=function(){return new b.DataBuffer(this)};b.DataBuffer.prototype.compact=function(){if(this.read>0){var e=new Uint8Array(this.data.buffer,this.read),t=new Uint8Array(e.byteLength);t.set(e),this.data=new DataView(t),this.write-=this.read,this.read=0}return this};b.DataBuffer.prototype.clear=function(){return this.data=new DataView(new ArrayBuffer(0)),this.read=this.write=0,this};b.DataBuffer.prototype.truncate=function(e){return this.write=Math.max(0,this.length()-e),this.read=Math.min(this.read,this.write),this};b.DataBuffer.prototype.toHex=function(){for(var e="",t=this.read;t0;)t&1&&(r+=e),t>>>=1,t>0&&(e+=e);return r};b.xorBytes=function(e,t,r){for(var n="",i="",s="",o=0,a=0;r>0;--r,++o)i=e.charCodeAt(o)^t.charCodeAt(o),a>=10&&(n+=s,s="",a=0),s+=String.fromCharCode(i),++a;return n+=s,n};b.hexToBytes=function(e){var t="",r=0;for(e.length&!0&&(r=1,t+=String.fromCharCode(parseInt(e[0],16)));r>24&255)+String.fromCharCode(e>>16&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(e&255)};var qe="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",ze=[62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,64,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],x0="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";b.encode64=function(e,t){for(var r="",n="",i,s,o,a=0;a>2),r+=qe.charAt((i&3)<<4|s>>4),isNaN(s)?r+="==":(r+=qe.charAt((s&15)<<2|o>>6),r+=isNaN(o)?"=":qe.charAt(o&63)),t&&r.length>t&&(n+=r.substr(0,t)+`\r +`,r=r.substr(t));return n+=r,n};b.decode64=function(e){e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(var t="",r,n,i,s,o=0;o>4),i!==64&&(t+=String.fromCharCode((n&15)<<4|i>>2),s!==64&&(t+=String.fromCharCode((i&3)<<6|s)));return t};b.encodeUtf8=function(e){return unescape(encodeURIComponent(e))};b.decodeUtf8=function(e){return decodeURIComponent(escape(e))};b.binary={raw:{},hex:{},base64:{},base58:{},baseN:{encode:y0.encode,decode:y0.decode}};b.binary.raw.encode=function(e){return String.fromCharCode.apply(null,e)};b.binary.raw.decode=function(e,t,r){var n=t;n||(n=new Uint8Array(e.length)),r=r||0;for(var i=r,s=0;s>2),r+=qe.charAt((i&3)<<4|s>>4),isNaN(s)?r+="==":(r+=qe.charAt((s&15)<<2|o>>6),r+=isNaN(o)?"=":qe.charAt(o&63)),t&&r.length>t&&(n+=r.substr(0,t)+`\r +`,r=r.substr(t));return n+=r,n};b.binary.base64.decode=function(e,t,r){var n=t;n||(n=new Uint8Array(Math.ceil(e.length/4)*3)),e=e.replace(/[^A-Za-z0-9\+\/\=]/g,""),r=r||0;for(var i,s,o,a,c=0,f=r;c>4,o!==64&&(n[f++]=(s&15)<<4|o>>2,a!==64&&(n[f++]=(o&3)<<6|a));return t?f-r:n.subarray(0,f)};b.binary.base58.encode=function(e,t){return b.binary.baseN.encode(e,x0,t)};b.binary.base58.decode=function(e,t){return b.binary.baseN.decode(e,x0,t)};b.text={utf8:{},utf16:{}};b.text.utf8.encode=function(e,t,r){e=b.encodeUtf8(e);var n=t;n||(n=new Uint8Array(e.length)),r=r||0;for(var i=r,s=0;s"u"&&(r=["web","flash"]);var i,s=!1,o=null;for(var a in r){i=r[a];try{if(i==="flash"||i==="both"){if(t[0]===null)throw new Error("Flash local storage not available.");n=e.apply(this,t),s=i==="flash"}(i==="web"||i==="both")&&(t[0]=localStorage,n=e.apply(this,t),s=!0)}catch(c){o=c}if(s)break}if(!s)throw o;return n};b.setItem=function(e,t,r,n,i){ai(Zh,arguments,i)};b.getItem=function(e,t,r,n){return ai(Xh,arguments,n)};b.removeItem=function(e,t,r,n){ai(Qh,arguments,n)};b.clearItems=function(e,t,r){ai(Jh,arguments,r)};b.isEmpty=function(e){for(var t in e)if(e.hasOwnProperty(t))return!1;return!0};b.format=function(e){for(var t=/%./g,r,n,i=0,s=[],o=0;r=t.exec(e);){n=e.substring(o,t.lastIndex-2),n.length>0&&s.push(n),o=t.lastIndex;var a=r[0][1];switch(a){case"s":case"o":i");break;case"%":s.push("%");break;default:s.push("<%"+a+"?>")}}return s.push(e.substring(o)),s.join("")};b.formatNumber=function(e,t,r,n){var i=e,s=isNaN(t=Math.abs(t))?2:t,o=r===void 0?",":r,a=n===void 0?".":n,c=i<0?"-":"",f=parseInt(i=Math.abs(+i||0).toFixed(s),10)+"",u=f.length>3?f.length%3:0;return c+(u?f.substr(0,u)+a:"")+f.substr(u).replace(/(\d{3})(?=\d)/g,"$1"+a)+(s?o+Math.abs(i-f).toFixed(s).slice(2):"")};b.formatSize=function(e){return e>=1073741824?e=b.formatNumber(e/1073741824,2,".","")+" GiB":e>=1048576?e=b.formatNumber(e/1048576,2,".","")+" MiB":e>=1024?e=b.formatNumber(e/1024,0)+" KiB":e=b.formatNumber(e,0)+" bytes",e};b.bytesFromIP=function(e){return e.indexOf(".")!==-1?b.bytesFromIPv4(e):e.indexOf(":")!==-1?b.bytesFromIPv6(e):null};b.bytesFromIPv4=function(e){if(e=e.split("."),e.length!==4)return null;for(var t=b.createBuffer(),r=0;rr[n].end-r[n].start&&(n=r.length-1))}t.push(s)}if(r.length>0){var c=r[n];c.end-c.start>0&&(t.splice(c.start,c.end-c.start+1,""),c.start===0&&t.unshift(""),c.end===7&&t.push(""))}return t.join(":")};b.estimateCores=function(e,t){if(typeof e=="function"&&(t=e,e={}),e=e||{},"cores"in b&&!e.update)return t(null,b.cores);if(typeof navigator<"u"&&"hardwareConcurrency"in navigator&&navigator.hardwareConcurrency>0)return b.cores=navigator.hardwareConcurrency,t(null,b.cores);if(typeof Worker>"u")return b.cores=1,t(null,b.cores);if(typeof Blob>"u")return b.cores=2,t(null,b.cores);var r=URL.createObjectURL(new Blob(["(",function(){self.addEventListener("message",function(o){for(var a=Date.now(),c=a+4;Date.now()x.st&&u.stu.st&&x.st{var un=ht();un.pki=un.pki||{};var Rs=m0.exports=un.pki.oids=un.oids=un.oids||{};function P(e,t){Rs[e]=t,Rs[t]=e}function ft(e,t){Rs[e]=t}P("1.2.840.113549.1.1.1","rsaEncryption");P("1.2.840.113549.1.1.4","md5WithRSAEncryption");P("1.2.840.113549.1.1.5","sha1WithRSAEncryption");P("1.2.840.113549.1.1.7","RSAES-OAEP");P("1.2.840.113549.1.1.8","mgf1");P("1.2.840.113549.1.1.9","pSpecified");P("1.2.840.113549.1.1.10","RSASSA-PSS");P("1.2.840.113549.1.1.11","sha256WithRSAEncryption");P("1.2.840.113549.1.1.12","sha384WithRSAEncryption");P("1.2.840.113549.1.1.13","sha512WithRSAEncryption");P("1.3.101.112","EdDSA25519");P("1.2.840.10040.4.3","dsa-with-sha1");P("1.3.14.3.2.7","desCBC");P("1.3.14.3.2.26","sha1");P("1.3.14.3.2.29","sha1WithRSASignature");P("2.16.840.1.101.3.4.2.1","sha256");P("2.16.840.1.101.3.4.2.2","sha384");P("2.16.840.1.101.3.4.2.3","sha512");P("2.16.840.1.101.3.4.2.4","sha224");P("2.16.840.1.101.3.4.2.5","sha512-224");P("2.16.840.1.101.3.4.2.6","sha512-256");P("1.2.840.113549.2.2","md2");P("1.2.840.113549.2.5","md5");P("1.2.840.113549.1.7.1","data");P("1.2.840.113549.1.7.2","signedData");P("1.2.840.113549.1.7.3","envelopedData");P("1.2.840.113549.1.7.4","signedAndEnvelopedData");P("1.2.840.113549.1.7.5","digestedData");P("1.2.840.113549.1.7.6","encryptedData");P("1.2.840.113549.1.9.1","emailAddress");P("1.2.840.113549.1.9.2","unstructuredName");P("1.2.840.113549.1.9.3","contentType");P("1.2.840.113549.1.9.4","messageDigest");P("1.2.840.113549.1.9.5","signingTime");P("1.2.840.113549.1.9.6","counterSignature");P("1.2.840.113549.1.9.7","challengePassword");P("1.2.840.113549.1.9.8","unstructuredAddress");P("1.2.840.113549.1.9.14","extensionRequest");P("1.2.840.113549.1.9.20","friendlyName");P("1.2.840.113549.1.9.21","localKeyId");P("1.2.840.113549.1.9.22.1","x509Certificate");P("1.2.840.113549.1.12.10.1.1","keyBag");P("1.2.840.113549.1.12.10.1.2","pkcs8ShroudedKeyBag");P("1.2.840.113549.1.12.10.1.3","certBag");P("1.2.840.113549.1.12.10.1.4","crlBag");P("1.2.840.113549.1.12.10.1.5","secretBag");P("1.2.840.113549.1.12.10.1.6","safeContentsBag");P("1.2.840.113549.1.5.13","pkcs5PBES2");P("1.2.840.113549.1.5.12","pkcs5PBKDF2");P("1.2.840.113549.1.12.1.1","pbeWithSHAAnd128BitRC4");P("1.2.840.113549.1.12.1.2","pbeWithSHAAnd40BitRC4");P("1.2.840.113549.1.12.1.3","pbeWithSHAAnd3-KeyTripleDES-CBC");P("1.2.840.113549.1.12.1.4","pbeWithSHAAnd2-KeyTripleDES-CBC");P("1.2.840.113549.1.12.1.5","pbeWithSHAAnd128BitRC2-CBC");P("1.2.840.113549.1.12.1.6","pbewithSHAAnd40BitRC2-CBC");P("1.2.840.113549.2.7","hmacWithSHA1");P("1.2.840.113549.2.8","hmacWithSHA224");P("1.2.840.113549.2.9","hmacWithSHA256");P("1.2.840.113549.2.10","hmacWithSHA384");P("1.2.840.113549.2.11","hmacWithSHA512");P("1.2.840.113549.3.7","des-EDE3-CBC");P("2.16.840.1.101.3.4.1.2","aes128-CBC");P("2.16.840.1.101.3.4.1.22","aes192-CBC");P("2.16.840.1.101.3.4.1.42","aes256-CBC");P("2.5.4.3","commonName");P("2.5.4.4","surname");P("2.5.4.5","serialNumber");P("2.5.4.6","countryName");P("2.5.4.7","localityName");P("2.5.4.8","stateOrProvinceName");P("2.5.4.9","streetAddress");P("2.5.4.10","organizationName");P("2.5.4.11","organizationalUnitName");P("2.5.4.12","title");P("2.5.4.13","description");P("2.5.4.15","businessCategory");P("2.5.4.17","postalCode");P("2.5.4.42","givenName");P("1.3.6.1.4.1.311.60.2.1.2","jurisdictionOfIncorporationStateOrProvinceName");P("1.3.6.1.4.1.311.60.2.1.3","jurisdictionOfIncorporationCountryName");P("2.16.840.1.113730.1.1","nsCertType");P("2.16.840.1.113730.1.13","nsComment");ft("2.5.29.1","authorityKeyIdentifier");ft("2.5.29.2","keyAttributes");ft("2.5.29.3","certificatePolicies");ft("2.5.29.4","keyUsageRestriction");ft("2.5.29.5","policyMapping");ft("2.5.29.6","subtreesConstraint");ft("2.5.29.7","subjectAltName");ft("2.5.29.8","issuerAltName");ft("2.5.29.9","subjectDirectoryAttributes");ft("2.5.29.10","basicConstraints");ft("2.5.29.11","nameConstraints");ft("2.5.29.12","policyConstraints");ft("2.5.29.13","basicConstraints");P("2.5.29.14","subjectKeyIdentifier");P("2.5.29.15","keyUsage");ft("2.5.29.16","privateKeyUsagePeriod");P("2.5.29.17","subjectAltName");P("2.5.29.18","issuerAltName");P("2.5.29.19","basicConstraints");ft("2.5.29.20","cRLNumber");ft("2.5.29.21","cRLReason");ft("2.5.29.22","expirationDate");ft("2.5.29.23","instructionCode");ft("2.5.29.24","invalidityDate");ft("2.5.29.25","cRLDistributionPoints");ft("2.5.29.26","issuingDistributionPoint");ft("2.5.29.27","deltaCRLIndicator");ft("2.5.29.28","issuingDistributionPoint");ft("2.5.29.29","certificateIssuer");ft("2.5.29.30","nameConstraints");P("2.5.29.31","cRLDistributionPoints");P("2.5.29.32","certificatePolicies");ft("2.5.29.33","policyMappings");ft("2.5.29.34","policyConstraints");P("2.5.29.35","authorityKeyIdentifier");ft("2.5.29.36","policyConstraints");P("2.5.29.37","extKeyUsage");ft("2.5.29.46","freshestCRL");ft("2.5.29.54","inhibitAnyPolicy");P("1.3.6.1.4.1.11129.2.4.2","timestampList");P("1.3.6.1.5.5.7.1.1","authorityInfoAccess");P("1.3.6.1.5.5.7.3.1","serverAuth");P("1.3.6.1.5.5.7.3.2","clientAuth");P("1.3.6.1.5.5.7.3.3","codeSigning");P("1.3.6.1.5.5.7.3.4","emailProtection");P("1.3.6.1.5.5.7.3.8","timeStamping")});var ln=pt((Gg,v0)=>{var gt=ht();Ct();ci();var V=v0.exports=gt.asn1=gt.asn1||{};V.Class={UNIVERSAL:0,APPLICATION:64,CONTEXT_SPECIFIC:128,PRIVATE:192};V.Type={NONE:0,BOOLEAN:1,INTEGER:2,BITSTRING:3,OCTETSTRING:4,NULL:5,OID:6,ODESC:7,EXTERNAL:8,REAL:9,ENUMERATED:10,EMBEDDED:11,UTF8:12,ROID:13,SEQUENCE:16,SET:17,PRINTABLESTRING:19,IA5STRING:22,UTCTIME:23,GENERALIZEDTIME:24,BMPSTRING:30};V.create=function(e,t,r,n,i){if(gt.util.isArray(n)){for(var s=[],o=0;ot){var n=new Error("Too few bytes to parse DER.");throw n.available=e.length(),n.remaining=t,n.requested=r,n}}var jh=function(e,t){var r=e.getByte();if(t--,r!==128){var n,i=r&128;if(!i)n=r;else{var s=r&127;hn(e,t,s),n=e.getInt(s<<3)}if(n<0)throw new Error("Negative length: "+n);return n}};V.fromDer=function(e,t){t===void 0&&(t={strict:!0,parseAllBytes:!0,decodeBitStrings:!0}),typeof t=="boolean"&&(t={strict:t,parseAllBytes:!0,decodeBitStrings:!0}),"strict"in t||(t.strict=!0),"parseAllBytes"in t||(t.parseAllBytes=!0),"decodeBitStrings"in t||(t.decodeBitStrings=!0),typeof e=="string"&&(e=gt.util.createBuffer(e));var r=e.length(),n=fi(e,e.length(),0,t);if(t.parseAllBytes&&e.length()!==0){var i=new Error("Unparsed DER bytes remain after ASN.1 parsing.");throw i.byteCount=r,i.remaining=e.length(),i}return n};function fi(e,t,r,n){var i;hn(e,t,2);var s=e.getByte();t--;var o=s&192,a=s&31;i=e.length();var c=jh(e,t);if(t-=i-e.length(),c!==void 0&&c>t){if(n.strict){var f=new Error("Too few bytes to read ASN.1 value.");throw f.available=e.length(),f.remaining=t,f.requested=c,f}c=t}var u,h,l=(s&32)===32;if(l)if(u=[],c===void 0)for(;;){if(hn(e,t,2),e.bytes(2)==="\0\0"){e.getBytes(2),t-=2;break}i=e.length(),u.push(fi(e,t,r+1,n)),t-=i-e.length()}else for(;c>0;)i=e.length(),u.push(fi(e,c,r+1,n)),t-=i-e.length(),c-=i-e.length();if(u===void 0&&o===V.Class.UNIVERSAL&&a===V.Type.BITSTRING&&(h=e.bytes(c)),u===void 0&&n.decodeBitStrings&&o===V.Class.UNIVERSAL&&a===V.Type.BITSTRING&&c>1){var x=e.read,p=t,d=0;if(a===V.Type.BITSTRING&&(hn(e,t,1),d=e.getByte(),t--),d===0)try{i=e.length();var y={strict:!0,decodeBitStrings:!0},g=fi(e,t,r+1,y),v=i-e.length();t-=v,a==V.Type.BITSTRING&&v++;var m=g.tagClass;v===c&&(m===V.Class.UNIVERSAL||m===V.Class.CONTEXT_SPECIFIC)&&(u=[g])}catch{}u===void 0&&(e.read=x,t=p)}if(u===void 0){if(c===void 0){if(n.strict)throw new Error("Non-constructed ASN.1 object of indefinite length.");c=t}if(a===V.Type.BMPSTRING)for(u="";c>0;c-=2)hn(e,t,2),u+=String.fromCharCode(e.getInt16()),t-=2;else u=e.getBytes(c),t-=c}var C=h===void 0?null:{bitStringContents:h};return V.create(o,a,l,u,C)}V.toDer=function(e){var t=gt.util.createBuffer(),r=e.tagClass|e.type,n=gt.util.createBuffer(),i=!1;if("bitStringContents"in e&&(i=!0,e.original&&(i=V.equals(e,e.original))),i)n.putBytes(e.bitStringContents);else if(e.composed){e.constructed?r|=32:n.putByte(0);for(var s=0;s1&&(e.value.charCodeAt(0)===0&&!(e.value.charCodeAt(1)&128)||e.value.charCodeAt(0)===255&&(e.value.charCodeAt(1)&128)===128)?n.putBytes(e.value.substr(1)):n.putBytes(e.value);if(t.putByte(r),n.length()<=127)t.putByte(n.length()&127);else{var o=n.length(),a="";do a+=String.fromCharCode(o&255),o=o>>>8;while(o>0);t.putByte(a.length|128);for(var s=a.length-1;s>=0;--s)t.putByte(a.charCodeAt(s))}return t.putBuffer(n),t};V.oidToDer=function(e){var t=e.split("."),r=gt.util.createBuffer();r.putByte(40*parseInt(t[0],10)+parseInt(t[1],10));for(var n,i,s,o,a=2;a>>7,n||(o|=128),i.push(o),n=!1;while(s>0);for(var c=i.length-1;c>=0;--c)r.putByte(i[c])}return r};V.derToOid=function(e){var t;typeof e=="string"&&(e=gt.util.createBuffer(e));var r=e.getByte();t=Math.floor(r/40)+"."+r%40;for(var n=0;e.length()>0;)r=e.getByte(),n=n<<7,r&128?n+=r&127:(t+="."+(n+r),n=0);return t};V.utcTimeToDate=function(e){var t=new Date,r=parseInt(e.substr(0,2),10);r=r>=50?1900+r:2e3+r;var n=parseInt(e.substr(2,2),10)-1,i=parseInt(e.substr(4,2),10),s=parseInt(e.substr(6,2),10),o=parseInt(e.substr(8,2),10),a=0;if(e.length>11){var c=e.charAt(10),f=10;c!=="+"&&c!=="-"&&(a=parseInt(e.substr(10,2),10),f+=2)}if(t.setUTCFullYear(r,n,i),t.setUTCHours(s,o,a,0),f&&(c=e.charAt(f),c==="+"||c==="-")){var u=parseInt(e.substr(f+1,2),10),h=parseInt(e.substr(f+4,2),10),l=u*60+h;l*=6e4,c==="+"?t.setTime(+t-l):t.setTime(+t+l)}return t};V.generalizedTimeToDate=function(e){var t=new Date,r=parseInt(e.substr(0,4),10),n=parseInt(e.substr(4,2),10)-1,i=parseInt(e.substr(6,2),10),s=parseInt(e.substr(8,2),10),o=parseInt(e.substr(10,2),10),a=parseInt(e.substr(12,2),10),c=0,f=0,u=!1;e.charAt(e.length-1)==="Z"&&(u=!0);var h=e.length-5,l=e.charAt(h);if(l==="+"||l==="-"){var x=parseInt(e.substr(h+1,2),10),p=parseInt(e.substr(h+4,2),10);f=x*60+p,f*=6e4,l==="+"&&(f*=-1),u=!0}return e.charAt(14)==="."&&(c=parseFloat(e.substr(14),10)*1e3),u?(t.setUTCFullYear(r,n,i),t.setUTCHours(s,o,a,c),t.setTime(+t+f)):(t.setFullYear(r,n,i),t.setHours(s,o,a,c)),t};V.dateToUtcTime=function(e){if(typeof e=="string")return e;var t="",r=[];r.push((""+e.getUTCFullYear()).substr(2)),r.push(""+(e.getUTCMonth()+1)),r.push(""+e.getUTCDate()),r.push(""+e.getUTCHours()),r.push(""+e.getUTCMinutes()),r.push(""+e.getUTCSeconds());for(var n=0;n=-128&&e<128)return t.putSignedInt(e,8);if(e>=-32768&&e<32768)return t.putSignedInt(e,16);if(e>=-8388608&&e<8388608)return t.putSignedInt(e,24);if(e>=-2147483648&&e<2147483648)return t.putSignedInt(e,32);var r=new Error("Integer too large; max is 32-bits.");throw r.integer=e,r};V.derToInteger=function(e){typeof e=="string"&&(e=gt.util.createBuffer(e));var t=e.length()*8;if(t>32)throw new Error("Integer too large; max is 32-bits.");return e.getSignedInt(t)};V.validate=function(e,t,r,n){var i=!1;if((e.tagClass===t.tagClass||typeof t.tagClass>"u")&&(e.type===t.type||typeof t.type>"u"))if(e.constructed===t.constructed||typeof t.constructed>"u"){if(i=!0,t.value&>.util.isArray(t.value))for(var s=0,o=0;i&&o0&&(n+=` +`);for(var i="",s=0;s1?n+="0x"+gt.util.bytesToHex(e.value.slice(1)):n+="(none)",e.value.length>0){var f=e.value.charCodeAt(0);f==1?n+=" (1 unused bit shown)":f>1&&(n+=" ("+f+" unused bits shown)")}}else if(e.type===V.Type.OCTETSTRING)b0.test(e.value)||(n+="("+e.value+") "),n+="0x"+gt.util.bytesToHex(e.value);else if(e.type===V.Type.UTF8)try{n+=gt.util.decodeUtf8(e.value)}catch(u){if(u.message==="URI malformed")n+="0x"+gt.util.bytesToHex(e.value)+" (malformed UTF8)";else throw u}else e.type===V.Type.PRINTABLESTRING||e.type===V.Type.IA5String?n+=e.value:b0.test(e.value)?n+="0x"+gt.util.bytesToHex(e.value):e.value.length===0?n+="[null]":n+=e.value}return n}});var Ds=pt((Yg,w0)=>{var Nt=ht();Ct();w0.exports=Nt.cipher=Nt.cipher||{};Nt.cipher.algorithms=Nt.cipher.algorithms||{};Nt.cipher.createCipher=function(e,t){var r=e;if(typeof r=="string"&&(r=Nt.cipher.getAlgorithm(r),r&&(r=r())),!r)throw new Error("Unsupported algorithm: "+e);return new Nt.cipher.BlockCipher({algorithm:r,key:t,decrypt:!1})};Nt.cipher.createDecipher=function(e,t){var r=e;if(typeof r=="string"&&(r=Nt.cipher.getAlgorithm(r),r&&(r=r())),!r)throw new Error("Unsupported algorithm: "+e);return new Nt.cipher.BlockCipher({algorithm:r,key:t,decrypt:!0})};Nt.cipher.registerAlgorithm=function(e,t){e=e.toUpperCase(),Nt.cipher.algorithms[e]=t};Nt.cipher.getAlgorithm=function(e){return e=e.toUpperCase(),e in Nt.cipher.algorithms?Nt.cipher.algorithms[e]:null};var Ns=Nt.cipher.BlockCipher=function(e){this.algorithm=e.algorithm,this.mode=this.algorithm.mode,this.blockSize=this.mode.blockSize,this._finish=!1,this._input=null,this.output=null,this._op=e.decrypt?this.mode.decrypt:this.mode.encrypt,this._decrypt=e.decrypt,this.algorithm.initialize(e)};Ns.prototype.start=function(e){e=e||{};var t={};for(var r in e)t[r]=e[r];t.decrypt=this._decrypt,this._finish=!1,this._input=Nt.util.createBuffer(),this.output=e.output||Nt.util.createBuffer(),this.mode.start(t)};Ns.prototype.update=function(e){for(e&&this._input.putBuffer(e);!this._op.call(this.mode,this._input,this.output,this._finish)&&!this._finish;);this._input.compact()};Ns.prototype.finish=function(e){e&&(this.mode.name==="ECB"||this.mode.name==="CBC")&&(this.mode.pad=function(r){return e(this.blockSize,r,!1)},this.mode.unpad=function(r){return e(this.blockSize,r,!0)});var t={};return t.decrypt=this._decrypt,t.overflow=this._input.length()%this.blockSize,!(!this._decrypt&&this.mode.pad&&!this.mode.pad(this._input,t)||(this._finish=!0,this.update(),this._decrypt&&this.mode.unpad&&!this.mode.unpad(this.output,t))||this.mode.afterFinish&&!this.mode.afterFinish(this.output,t))}});var ks=pt((Wg,E0)=>{var Dt=ht();Ct();Dt.cipher=Dt.cipher||{};var nt=E0.exports=Dt.cipher.modes=Dt.cipher.modes||{};nt.ecb=function(e){e=e||{},this.name="ECB",this.cipher=e.cipher,this.blockSize=e.blockSize||16,this._ints=this.blockSize/4,this._inBlock=new Array(this._ints),this._outBlock=new Array(this._ints)};nt.ecb.prototype.start=function(e){};nt.ecb.prototype.encrypt=function(e,t,r){if(e.length()0))return!0;for(var n=0;n0))return!0;for(var n=0;n0)return!1;var r=e.length(),n=e.at(r-1);return n>this.blockSize<<2?!1:(e.truncate(n),!0)};nt.cbc=function(e){e=e||{},this.name="CBC",this.cipher=e.cipher,this.blockSize=e.blockSize||16,this._ints=this.blockSize/4,this._inBlock=new Array(this._ints),this._outBlock=new Array(this._ints)};nt.cbc.prototype.start=function(e){if(e.iv===null){if(!this._prev)throw new Error("Invalid IV parameter.");this._iv=this._prev.slice(0)}else if("iv"in e)this._iv=ui(e.iv,this.blockSize),this._prev=this._iv.slice(0);else throw new Error("Invalid IV parameter.")};nt.cbc.prototype.encrypt=function(e,t,r){if(e.length()0))return!0;for(var n=0;n0))return!0;for(var n=0;n0)return!1;var r=e.length(),n=e.at(r-1);return n>this.blockSize<<2?!1:(e.truncate(n),!0)};nt.cfb=function(e){e=e||{},this.name="CFB",this.cipher=e.cipher,this.blockSize=e.blockSize||16,this._ints=this.blockSize/4,this._inBlock=null,this._outBlock=new Array(this._ints),this._partialBlock=new Array(this._ints),this._partialOutput=Dt.util.createBuffer(),this._partialBytes=0};nt.cfb.prototype.start=function(e){if(!("iv"in e))throw new Error("Invalid IV parameter.");this._iv=ui(e.iv,this.blockSize),this._inBlock=this._iv.slice(0),this._partialBytes=0};nt.cfb.prototype.encrypt=function(e,t,r){var n=e.length();if(n===0)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),this._partialBytes===0&&n>=this.blockSize){for(var i=0;i0&&(s=this.blockSize-s),this._partialOutput.clear();for(var i=0;i0)e.read-=this.blockSize;else for(var i=0;i0&&this._partialOutput.getBytes(this._partialBytes),s>0&&!r)return t.putBytes(this._partialOutput.getBytes(s-this._partialBytes)),this._partialBytes=s,!0;t.putBytes(this._partialOutput.getBytes(n-this._partialBytes)),this._partialBytes=0};nt.cfb.prototype.decrypt=function(e,t,r){var n=e.length();if(n===0)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),this._partialBytes===0&&n>=this.blockSize){for(var i=0;i0&&(s=this.blockSize-s),this._partialOutput.clear();for(var i=0;i0)e.read-=this.blockSize;else for(var i=0;i0&&this._partialOutput.getBytes(this._partialBytes),s>0&&!r)return t.putBytes(this._partialOutput.getBytes(s-this._partialBytes)),this._partialBytes=s,!0;t.putBytes(this._partialOutput.getBytes(n-this._partialBytes)),this._partialBytes=0};nt.ofb=function(e){e=e||{},this.name="OFB",this.cipher=e.cipher,this.blockSize=e.blockSize||16,this._ints=this.blockSize/4,this._inBlock=null,this._outBlock=new Array(this._ints),this._partialOutput=Dt.util.createBuffer(),this._partialBytes=0};nt.ofb.prototype.start=function(e){if(!("iv"in e))throw new Error("Invalid IV parameter.");this._iv=ui(e.iv,this.blockSize),this._inBlock=this._iv.slice(0),this._partialBytes=0};nt.ofb.prototype.encrypt=function(e,t,r){var n=e.length();if(e.length()===0)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),this._partialBytes===0&&n>=this.blockSize){for(var i=0;i0&&(s=this.blockSize-s),this._partialOutput.clear();for(var i=0;i0)e.read-=this.blockSize;else for(var i=0;i0&&this._partialOutput.getBytes(this._partialBytes),s>0&&!r)return t.putBytes(this._partialOutput.getBytes(s-this._partialBytes)),this._partialBytes=s,!0;t.putBytes(this._partialOutput.getBytes(n-this._partialBytes)),this._partialBytes=0};nt.ofb.prototype.decrypt=nt.ofb.prototype.encrypt;nt.ctr=function(e){e=e||{},this.name="CTR",this.cipher=e.cipher,this.blockSize=e.blockSize||16,this._ints=this.blockSize/4,this._inBlock=null,this._outBlock=new Array(this._ints),this._partialOutput=Dt.util.createBuffer(),this._partialBytes=0};nt.ctr.prototype.start=function(e){if(!("iv"in e))throw new Error("Invalid IV parameter.");this._iv=ui(e.iv,this.blockSize),this._inBlock=this._iv.slice(0),this._partialBytes=0};nt.ctr.prototype.encrypt=function(e,t,r){var n=e.length();if(n===0)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),this._partialBytes===0&&n>=this.blockSize)for(var i=0;i0&&(s=this.blockSize-s),this._partialOutput.clear();for(var i=0;i0&&(e.read-=this.blockSize),this._partialBytes>0&&this._partialOutput.getBytes(this._partialBytes),s>0&&!r)return t.putBytes(this._partialOutput.getBytes(s-this._partialBytes)),this._partialBytes=s,!0;t.putBytes(this._partialOutput.getBytes(n-this._partialBytes)),this._partialBytes=0}hi(this._inBlock)};nt.ctr.prototype.decrypt=nt.ctr.prototype.encrypt;nt.gcm=function(e){e=e||{},this.name="GCM",this.cipher=e.cipher,this.blockSize=e.blockSize||16,this._ints=this.blockSize/4,this._inBlock=new Array(this._ints),this._outBlock=new Array(this._ints),this._partialOutput=Dt.util.createBuffer(),this._partialBytes=0,this._R=3774873600};nt.gcm.prototype.start=function(e){if(!("iv"in e))throw new Error("Invalid IV parameter.");var t=Dt.util.createBuffer(e.iv);this._cipherLength=0;var r;if("additionalData"in e?r=Dt.util.createBuffer(e.additionalData):r=Dt.util.createBuffer(),"tagLength"in e?this._tagLength=e.tagLength:this._tagLength=128,this._tag=null,e.decrypt&&(this._tag=Dt.util.createBuffer(e.tag).getBytes(),this._tag.length!==this._tagLength/8))throw new Error("Authentication tag does not match tag length.");this._hashBlock=new Array(this._ints),this.tag=null,this._hashSubkey=new Array(this._ints),this.cipher.encrypt([0,0,0,0],this._hashSubkey),this.componentBits=4,this._m=this.generateHashTable(this._hashSubkey,this.componentBits);var n=t.length();if(n===12)this._j0=[t.getInt32(),t.getInt32(),t.getInt32(),1];else{for(this._j0=[0,0,0,0];t.length()>0;)this._j0=this.ghash(this._hashSubkey,this._j0,[t.getInt32(),t.getInt32(),t.getInt32(),t.getInt32()]);this._j0=this.ghash(this._hashSubkey,this._j0,[0,0].concat(Ps(n*8)))}this._inBlock=this._j0.slice(0),hi(this._inBlock),this._partialBytes=0,r=Dt.util.createBuffer(r),this._aDataLength=Ps(r.length()*8);var i=r.length()%this.blockSize;for(i&&r.fillWithByte(0,this.blockSize-i),this._s=[0,0,0,0];r.length()>0;)this._s=this.ghash(this._hashSubkey,this._s,[r.getInt32(),r.getInt32(),r.getInt32(),r.getInt32()])};nt.gcm.prototype.encrypt=function(e,t,r){var n=e.length();if(n===0)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),this._partialBytes===0&&n>=this.blockSize){for(var i=0;i0&&(s=this.blockSize-s),this._partialOutput.clear();for(var i=0;i0&&this._partialOutput.getBytes(this._partialBytes),s>0&&!r)return e.read-=this.blockSize,t.putBytes(this._partialOutput.getBytes(s-this._partialBytes)),this._partialBytes=s,!0;t.putBytes(this._partialOutput.getBytes(n-this._partialBytes)),this._partialBytes=0}this._s=this.ghash(this._hashSubkey,this._s,this._outBlock),hi(this._inBlock)};nt.gcm.prototype.decrypt=function(e,t,r){var n=e.length();if(n0))return!0;this.cipher.encrypt(this._inBlock,this._outBlock),hi(this._inBlock),this._hashBlock[0]=e.getInt32(),this._hashBlock[1]=e.getInt32(),this._hashBlock[2]=e.getInt32(),this._hashBlock[3]=e.getInt32(),this._s=this.ghash(this._hashSubkey,this._s,this._hashBlock);for(var i=0;i0;--n)t[n]=e[n]>>>1|(e[n-1]&1)<<31;t[0]=e[0]>>>1,r&&(t[0]^=this._R)};nt.gcm.prototype.tableMultiply=function(e){for(var t=[0,0,0,0],r=0;r<32;++r){var n=r/8|0,i=e[n]>>>(7-r%8)*4&15,s=this._m[r][i];t[0]^=s[0],t[1]^=s[1],t[2]^=s[2],t[3]^=s[3]}return t};nt.gcm.prototype.ghash=function(e,t,r){return t[0]^=r[0],t[1]^=r[1],t[2]^=r[2],t[3]^=r[3],this.tableMultiply(t)};nt.gcm.prototype.generateHashTable=function(e,t){for(var r=8/t,n=4*r,i=16*r,s=new Array(i),o=0;o>>1,i=new Array(r);i[n]=e.slice(0);for(var s=n>>>1;s>0;)this.pow(i[2*s],i[s]=[]),s>>=1;for(s=2;s4){var r=e;e=Dt.util.createBuffer();for(var n=0;n{var dt=ht();Ds();ks();Ct();C0.exports=dt.aes=dt.aes||{};dt.aes.startEncrypting=function(e,t,r,n){var i=li({key:e,output:r,decrypt:!1,mode:n});return i.start(t),i};dt.aes.createEncryptionCipher=function(e,t){return li({key:e,output:null,decrypt:!1,mode:t})};dt.aes.startDecrypting=function(e,t,r,n){var i=li({key:e,output:r,decrypt:!0,mode:n});return i.start(t),i};dt.aes.createDecryptionCipher=function(e,t){return li({key:e,output:null,decrypt:!0,mode:t})};dt.aes.Algorithm=function(e,t){Os||B0();var r=this;r.name=e,r.mode=new t({blockSize:16,cipher:{encrypt:function(n,i){return Ks(r._w,n,i,!1)},decrypt:function(n,i){return Ks(r._w,n,i,!0)}}}),r._init=!1};dt.aes.Algorithm.prototype.initialize=function(e){if(!this._init){var t=e.key,r;if(typeof t=="string"&&(t.length===16||t.length===24||t.length===32))t=dt.util.createBuffer(t);else if(dt.util.isArray(t)&&(t.length===16||t.length===24||t.length===32)){r=t,t=dt.util.createBuffer();for(var n=0;n>>2;for(var n=0;n>8^a&255^99,Ht[r]=a,Us[a]=r,c=e[a],i=e[r],s=e[i],o=e[s],f=c<<24^a<<16^a<<8^(a^c),u=(i^s^o)<<24^(r^o)<<16^(r^s^o)<<8^(r^i^o);for(var h=0;h<4;++h)nr[h][r]=f,ae[h][a]=u,f=f<<24|f>>>8,u=u<<24|u>>>8;r===0?r=n=1:(r=i^e[e[e[i^o]]],n^=e[e[n]])}}function A0(e,t){for(var r=e.slice(0),n,i=1,s=r.length,o=s+6+1,a=Rr*o,c=s;c>>16&255]<<24^Ht[n>>>8&255]<<16^Ht[n&255]<<8^Ht[n>>>24]^S0[i]<<24,i++):s>6&&c%s===4&&(n=Ht[n>>>24]<<24^Ht[n>>>16&255]<<16^Ht[n>>>8&255]<<8^Ht[n&255]),r[c]=r[c-s]^n;if(t){var f,u=ae[0],h=ae[1],l=ae[2],x=ae[3],p=r.slice(0);a=r.length;for(var c=0,d=a-Rr;c>>24]]^h[Ht[f>>>16&255]]^l[Ht[f>>>8&255]]^x[Ht[f&255]];r=p}return r}function Ks(e,t,r,n){var i=e.length/4-1,s,o,a,c,f;n?(s=ae[0],o=ae[1],a=ae[2],c=ae[3],f=Us):(s=nr[0],o=nr[1],a=nr[2],c=nr[3],f=Ht);var u,h,l,x,p,d,y;u=t[0]^e[0],h=t[n?3:1]^e[1],l=t[2]^e[2],x=t[n?1:3]^e[3];for(var g=3,v=1;v>>24]^o[h>>>16&255]^a[l>>>8&255]^c[x&255]^e[++g],d=s[h>>>24]^o[l>>>16&255]^a[x>>>8&255]^c[u&255]^e[++g],y=s[l>>>24]^o[x>>>16&255]^a[u>>>8&255]^c[h&255]^e[++g],x=s[x>>>24]^o[u>>>16&255]^a[h>>>8&255]^c[l&255]^e[++g],u=p,h=d,l=y;r[0]=f[u>>>24]<<24^f[h>>>16&255]<<16^f[l>>>8&255]<<8^f[x&255]^e[++g],r[n?3:1]=f[h>>>24]<<24^f[l>>>16&255]<<16^f[x>>>8&255]<<8^f[u&255]^e[++g],r[2]=f[l>>>24]<<24^f[x>>>16&255]<<16^f[u>>>8&255]<<8^f[h&255]^e[++g],r[n?1:3]=f[x>>>24]<<24^f[u>>>16&255]<<16^f[h>>>8&255]<<8^f[l&255]^e[++g]}function li(e){e=e||{};var t=(e.mode||"CBC").toUpperCase(),r="AES-"+t,n;e.decrypt?n=dt.cipher.createDecipher(r,e.key):n=dt.cipher.createCipher(r,e.key);var i=n.start;return n.start=function(s,o){var a=null;o instanceof dt.util.ByteBuffer&&(a=o,o={}),o=o||{},o.output=a,o.iv=s,i.call(n,o)},n}});var _0=pt((Zg,T0)=>{var vt=ht();Ds();ks();Ct();T0.exports=vt.des=vt.des||{};vt.des.startEncrypting=function(e,t,r,n){var i=pi({key:e,output:r,decrypt:!1,mode:n||(t===null?"ECB":"CBC")});return i.start(t),i};vt.des.createEncryptionCipher=function(e,t){return pi({key:e,output:null,decrypt:!1,mode:t})};vt.des.startDecrypting=function(e,t,r,n){var i=pi({key:e,output:r,decrypt:!0,mode:n||(t===null?"ECB":"CBC")});return i.start(t),i};vt.des.createDecryptionCipher=function(e,t){return pi({key:e,output:null,decrypt:!0,mode:t})};vt.des.Algorithm=function(e,t){var r=this;r.name=e,r.mode=new t({blockSize:8,cipher:{encrypt:function(n,i){return I0(r._keys,n,i,!1)},decrypt:function(n,i){return I0(r._keys,n,i,!0)}}}),r._init=!1};vt.des.Algorithm.prototype.initialize=function(e){if(!this._init){var t=vt.util.createBuffer(e.key);if(this.name.indexOf("3DES")===0&&t.length()!==24)throw new Error("Invalid Triple-DES key size: "+t.length()*8);this._keys=cl(t),this._init=!0}};le("DES-ECB",vt.cipher.modes.ecb);le("DES-CBC",vt.cipher.modes.cbc);le("DES-CFB",vt.cipher.modes.cfb);le("DES-OFB",vt.cipher.modes.ofb);le("DES-CTR",vt.cipher.modes.ctr);le("3DES-ECB",vt.cipher.modes.ecb);le("3DES-CBC",vt.cipher.modes.cbc);le("3DES-CFB",vt.cipher.modes.cfb);le("3DES-OFB",vt.cipher.modes.ofb);le("3DES-CTR",vt.cipher.modes.ctr);function le(e,t){var r=function(){return new vt.des.Algorithm(e,t)};vt.cipher.registerAlgorithm(e,r)}var tl=[16843776,0,65536,16843780,16842756,66564,4,65536,1024,16843776,16843780,1024,16778244,16842756,16777216,4,1028,16778240,16778240,66560,66560,16842752,16842752,16778244,65540,16777220,16777220,65540,0,1028,66564,16777216,65536,16843780,4,16842752,16843776,16777216,16777216,1024,16842756,65536,66560,16777220,1024,4,16778244,66564,16843780,65540,16842752,16778244,16777220,1028,66564,16843776,1028,16778240,16778240,0,65540,66560,0,16842756],el=[-2146402272,-2147450880,32768,1081376,1048576,32,-2146435040,-2147450848,-2147483616,-2146402272,-2146402304,-2147483648,-2147450880,1048576,32,-2146435040,1081344,1048608,-2147450848,0,-2147483648,32768,1081376,-2146435072,1048608,-2147483616,0,1081344,32800,-2146402304,-2146435072,32800,0,1081376,-2146435040,1048576,-2147450848,-2146435072,-2146402304,32768,-2146435072,-2147450880,32,-2146402272,1081376,32,32768,-2147483648,32800,-2146402304,1048576,-2147483616,1048608,-2147450848,-2147483616,1048608,1081344,0,-2147450880,32800,-2147483648,-2146435040,-2146402272,1081344],rl=[520,134349312,0,134348808,134218240,0,131592,134218240,131080,134217736,134217736,131072,134349320,131080,134348800,520,134217728,8,134349312,512,131584,134348800,134348808,131592,134218248,131584,131072,134218248,8,134349320,512,134217728,134349312,134217728,131080,520,131072,134349312,134218240,0,512,131080,134349320,134218240,134217736,512,0,134348808,134218248,131072,134217728,134349320,8,131592,131584,134217736,134348800,134218248,520,134348800,131592,8,134348808,131584],nl=[8396801,8321,8321,128,8396928,8388737,8388609,8193,0,8396800,8396800,8396929,129,0,8388736,8388609,1,8192,8388608,8396801,128,8388608,8193,8320,8388737,1,8320,8388736,8192,8396928,8396929,129,8388736,8388609,8396800,8396929,129,0,0,8396800,8320,8388736,8388737,1,8396801,8321,8321,128,8396929,129,1,8192,8388609,8193,8396928,8388737,8193,8320,8388608,8396801,128,8388608,8192,8396928],il=[256,34078976,34078720,1107296512,524288,256,1073741824,34078720,1074266368,524288,33554688,1074266368,1107296512,1107820544,524544,1073741824,33554432,1074266112,1074266112,0,1073742080,1107820800,1107820800,33554688,1107820544,1073742080,0,1107296256,34078976,33554432,1107296256,524544,524288,1107296512,256,33554432,1073741824,34078720,1107296512,1074266368,33554688,1073741824,1107820544,34078976,1074266368,256,33554432,1107820544,1107820800,524544,1107296256,1107820800,34078720,0,1074266112,1107296256,524544,33554688,1073742080,524288,0,1074266112,34078976,1073742080],sl=[536870928,541065216,16384,541081616,541065216,16,541081616,4194304,536887296,4210704,4194304,536870928,4194320,536887296,536870912,16400,0,4194320,536887312,16384,4210688,536887312,16,541065232,541065232,0,4210704,541081600,16400,4210688,541081600,536870912,536887296,16,541065232,4210688,541081616,4194304,16400,536870928,4194304,536887296,536870912,16400,536870928,541081616,4210688,541065216,4210704,541081600,0,541065232,16,16384,541065216,4210704,16384,4194320,536887312,0,541081600,536870912,4194320,536887312],ol=[2097152,69206018,67110914,0,2048,67110914,2099202,69208064,69208066,2097152,0,67108866,2,67108864,69206018,2050,67110912,2099202,2097154,67110912,67108866,69206016,69208064,2097154,69206016,2048,2050,69208066,2099200,2,67108864,2099200,67108864,2099200,2097152,67110914,67110914,69206018,69206018,2,2097154,67108864,67110912,2097152,69208064,2050,2099202,69208064,2050,67108866,69208066,69206016,2099200,0,2,69208066,0,2099202,69206016,2048,67108866,67110912,2048,2097154],al=[268439616,4096,262144,268701760,268435456,268439616,64,268435456,262208,268697600,268701760,266240,268701696,266304,4096,64,268697600,268435520,268439552,4160,266240,262208,268697664,268701696,4160,0,0,268697664,268435520,268439552,266304,262144,266304,262144,268701696,4096,64,268697664,4096,266304,268439552,64,268435520,268697600,268697664,268435456,262144,268439616,0,268701760,262208,268435520,268697600,268439552,268439616,0,268701760,266240,266240,4160,4160,262208,268435456,268701696];function cl(e){for(var t=[0,4,536870912,536870916,65536,65540,536936448,536936452,512,516,536871424,536871428,66048,66052,536936960,536936964],r=[0,1,1048576,1048577,67108864,67108865,68157440,68157441,256,257,1048832,1048833,67109120,67109121,68157696,68157697],n=[0,8,2048,2056,16777216,16777224,16779264,16779272,0,8,2048,2056,16777216,16777224,16779264,16779272],i=[0,2097152,134217728,136314880,8192,2105344,134225920,136323072,131072,2228224,134348800,136445952,139264,2236416,134356992,136454144],s=[0,262144,16,262160,0,262144,16,262160,4096,266240,4112,266256,4096,266240,4112,266256],o=[0,1024,32,1056,0,1024,32,1056,33554432,33555456,33554464,33555488,33554432,33555456,33554464,33555488],a=[0,268435456,524288,268959744,2,268435458,524290,268959746,0,268435456,524288,268959744,2,268435458,524290,268959746],c=[0,65536,2048,67584,536870912,536936448,536872960,536938496,131072,196608,133120,198656,537001984,537067520,537004032,537069568],f=[0,262144,0,262144,2,262146,2,262146,33554432,33816576,33554432,33816576,33554434,33816578,33554434,33816578],u=[0,268435456,8,268435464,0,268435456,8,268435464,1024,268436480,1032,268436488,1024,268436480,1032,268436488],h=[0,32,0,32,1048576,1048608,1048576,1048608,8192,8224,8192,8224,1056768,1056800,1056768,1056800],l=[0,16777216,512,16777728,2097152,18874368,2097664,18874880,67108864,83886080,67109376,83886592,69206016,85983232,69206528,85983744],x=[0,4096,134217728,134221824,524288,528384,134742016,134746112,16,4112,134217744,134221840,524304,528400,134742032,134746128],p=[0,4,256,260,0,4,256,260,1,5,257,261,1,5,257,261],d=e.length()>8?3:1,y=[],g=[0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0],v=0,m,C=0;C>>4^B)&252645135,B^=m,S^=m<<4,m=(B>>>-16^S)&65535,S^=m,B^=m<<-16,m=(S>>>2^B)&858993459,B^=m,S^=m<<2,m=(B>>>-16^S)&65535,S^=m,B^=m<<-16,m=(S>>>1^B)&1431655765,B^=m,S^=m<<1,m=(B>>>8^S)&16711935,S^=m,B^=m<<8,m=(S>>>1^B)&1431655765,B^=m,S^=m<<1,m=S<<8|B>>>20&240,S=B<<24|B<<8&16711680|B>>>8&65280|B>>>24&240,B=m;for(var R=0;R>>26,B=B<<2|B>>>26):(S=S<<1|S>>>27,B=B<<1|B>>>27),S&=-15,B&=-15;var L=t[S>>>28]|r[S>>>24&15]|n[S>>>20&15]|i[S>>>16&15]|s[S>>>12&15]|o[S>>>8&15]|a[S>>>4&15],O=c[B>>>28]|f[B>>>24&15]|u[B>>>20&15]|h[B>>>16&15]|l[B>>>12&15]|x[B>>>8&15]|p[B>>>4&15];m=(O>>>16^L)&65535,y[v++]=L^m,y[v++]=O^m<<16}}return y}function I0(e,t,r,n){var i=e.length===32?3:9,s;i===3?s=n?[30,-2,-2]:[0,32,2]:s=n?[94,62,-2,32,64,2,30,-2,-2]:[0,32,2,62,30,-2,64,96,2];var o,a=t[0],c=t[1];o=(a>>>4^c)&252645135,c^=o,a^=o<<4,o=(a>>>16^c)&65535,c^=o,a^=o<<16,o=(c>>>2^a)&858993459,a^=o,c^=o<<2,o=(c>>>8^a)&16711935,a^=o,c^=o<<8,o=(a>>>1^c)&1431655765,c^=o,a^=o<<1,a=a<<1|a>>>31,c=c<<1|c>>>31;for(var f=0;f>>4|c<<28)^e[l+1];o=a,a=c,c=o^(el[x>>>24&63]|nl[x>>>16&63]|sl[x>>>8&63]|al[x&63]|tl[p>>>24&63]|rl[p>>>16&63]|il[p>>>8&63]|ol[p&63])}o=a,a=c,c=o}a=a>>>1|a<<31,c=c>>>1|c<<31,o=(a>>>1^c)&1431655765,c^=o,a^=o<<1,o=(c>>>8^a)&16711935,a^=o,c^=o<<8,o=(c>>>2^a)&858993459,a^=o,c^=o<<2,o=(a>>>16^c)&65535,c^=o,a^=o<<16,o=(a>>>4^c)&252645135,c^=o,a^=o<<4,r[0]=a,r[1]=c}function pi(e){e=e||{};var t=(e.mode||"CBC").toUpperCase(),r="DES-"+t,n;e.decrypt?n=vt.cipher.createDecipher(r,e.key):n=vt.cipher.createCipher(r,e.key);var i=n.start;return n.start=function(s,o){var a=null;o instanceof vt.util.ByteBuffer&&(a=o,o={}),o=o||{},o.output=a,o.iv=s,i.call(n,o)},n}});var ir=pt((Xg,L0)=>{var di=ht();L0.exports=di.md=di.md||{};di.md.algorithms=di.md.algorithms||{}});var N0=pt((Qg,R0)=>{var Le=ht();ir();Ct();var fl=R0.exports=Le.hmac=Le.hmac||{};fl.create=function(){var e=null,t=null,r=null,n=null,i={};return i.start=function(s,o){if(s!==null)if(typeof s=="string")if(s=s.toLowerCase(),s in Le.md.algorithms)t=Le.md.algorithms[s].create();else throw new Error('Unknown hash algorithm "'+s+'"');else t=s;if(o===null)o=e;else{if(typeof o=="string")o=Le.util.createBuffer(o);else if(Le.util.isArray(o)){var a=o;o=Le.util.createBuffer();for(var c=0;ct.blockLength&&(t.start(),t.update(o.bytes()),o=t.digest()),r=Le.util.createBuffer(),n=Le.util.createBuffer(),f=o.length();for(var c=0;c{});var P0=pt((t2,D0)=>{var qt=ht();N0();ir();Ct();var ul=qt.pkcs5=qt.pkcs5||{},Re;qt.util.isNodejs&&!qt.options.usePureJavaScript&&(Re=yi());D0.exports=qt.pbkdf2=ul.pbkdf2=function(e,t,r,n,i,s){if(typeof i=="function"&&(s=i,i=null),qt.util.isNodejs&&!qt.options.usePureJavaScript&&Re.pbkdf2&&(i===null||typeof i!="object")&&(Re.pbkdf2Sync.length>4||!i||i==="sha1"))return typeof i!="string"&&(i="sha1"),e=Buffer.from(e,"binary"),t=Buffer.from(t,"binary"),s?Re.pbkdf2Sync.length===4?Re.pbkdf2(e,t,r,n,function(m,C){if(m)return s(m);s(null,C.toString("binary"))}):Re.pbkdf2(e,t,r,n,i,function(m,C){if(m)return s(m);s(null,C.toString("binary"))}):Re.pbkdf2Sync.length===4?Re.pbkdf2Sync(e,t,r,n).toString("binary"):Re.pbkdf2Sync(e,t,r,n,i).toString("binary");if((typeof i>"u"||i===null)&&(i="sha1"),typeof i=="string"){if(!(i in qt.md.algorithms))throw new Error("Unknown hash algorithm: "+i);i=qt.md[i].create()}var o=i.digestLength;if(n>4294967295*o){var a=new Error("Derived key is too long.");if(s)return s(a);throw a}var c=Math.ceil(n/o),f=n-(c-1)*o,u=qt.hmac.create();u.start(i,e);var h="",l,x,p;if(!s){for(var d=1;d<=c;++d){u.start(null,null),u.update(t),u.update(qt.util.int32ToBytes(d)),l=p=u.digest().getBytes();for(var y=2;y<=r;++y)u.start(null,null),u.update(p),x=u.digest().getBytes(),l=qt.util.xorBytes(l,x,o),p=x;h+=dc)return s(null,h);u.start(null,null),u.update(t),u.update(qt.util.int32ToBytes(d)),l=p=u.digest().getBytes(),y=2,v()}function v(){if(y<=r)return u.start(null,null),u.update(p),x=u.digest().getBytes(),l=qt.util.xorBytes(l,x,o),p=x,++y,qt.util.setImmediate(v);h+=d{var gi=ht();Ct();var k0=U0.exports=gi.pem=gi.pem||{};k0.encode=function(e,t){t=t||{};var r="-----BEGIN "+e.type+`-----\r +`,n;if(e.procType&&(n={name:"Proc-Type",values:[String(e.procType.version),e.procType.type]},r+=xi(n)),e.contentDomain&&(n={name:"Content-Domain",values:[e.contentDomain]},r+=xi(n)),e.dekInfo&&(n={name:"DEK-Info",values:[e.dekInfo.algorithm]},e.dekInfo.parameters&&n.values.push(e.dekInfo.parameters),r+=xi(n)),e.headers)for(var i=0;i65&&o!==-1){var a=t[o];a===","?(++o,t=t.substr(0,o)+`\r + `+t.substr(o)):t=t.substr(0,o)+`\r +`+a+t.substr(o+1),s=i-o-1,o=-1,++i}else(t[i]===" "||t[i]===" "||t[i]===",")&&(o=i);return t}function hl(e){return e.replace(/^\s+/,"")}});var q0=pt((r2,H0)=>{var pe=ht();ir();Ct();var M0=H0.exports=pe.sha256=pe.sha256||{};pe.md.sha256=pe.md.algorithms.sha256=M0;M0.create=function(){V0||ll();var e=null,t=pe.util.createBuffer(),r=new Array(64),n={algorithm:"sha256",blockLength:64,digestLength:32,messageLength:0,fullMessageLength:null,messageLengthSize:8};return n.start=function(){n.messageLength=0,n.fullMessageLength=n.messageLength64=[];for(var i=n.messageLengthSize/4,s=0;s>>0,o>>>0];for(var a=n.fullMessageLength.length-1;a>=0;--a)n.fullMessageLength[a]+=o[1],o[1]=o[0]+(n.fullMessageLength[a]/4294967296>>>0),n.fullMessageLength[a]=n.fullMessageLength[a]>>>0,o[0]=o[1]/4294967296>>>0;return t.putBytes(i),O0(e,r,t),(t.read>2048||t.length()===0)&&t.compact(),n},n.digest=function(){var i=pe.util.createBuffer();i.putBytes(t.bytes());var s=n.fullMessageLength[n.fullMessageLength.length-1]+n.messageLengthSize,o=s&n.blockLength-1;i.putBytes(Vs.substr(0,n.blockLength-o));for(var a,c,f=n.fullMessageLength[0]*8,u=0;u>>0,f+=c,i.putInt32(f>>>0),f=a>>>0;i.putInt32(f);var h={h0:e.h0,h1:e.h1,h2:e.h2,h3:e.h3,h4:e.h4,h5:e.h5,h6:e.h6,h7:e.h7};O0(h,r,i);var l=pe.util.createBuffer();return l.putInt32(h.h0),l.putInt32(h.h1),l.putInt32(h.h2),l.putInt32(h.h3),l.putInt32(h.h4),l.putInt32(h.h5),l.putInt32(h.h6),l.putInt32(h.h7),l},n};var Vs=null,V0=!1,F0=null;function ll(){Vs="\x80",Vs+=pe.util.fillString("\0",64),F0=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],V0=!0}function O0(e,t,r){for(var n,i,s,o,a,c,f,u,h,l,x,p,d,y,g,v=r.length();v>=64;){for(f=0;f<16;++f)t[f]=r.getInt32();for(;f<64;++f)n=t[f-2],n=(n>>>17|n<<15)^(n>>>19|n<<13)^n>>>10,i=t[f-15],i=(i>>>7|i<<25)^(i>>>18|i<<14)^i>>>3,t[f]=n+t[f-7]+i+t[f-16]|0;for(u=e.h0,h=e.h1,l=e.h2,x=e.h3,p=e.h4,d=e.h5,y=e.h6,g=e.h7,f=0;f<64;++f)o=(p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7),a=y^p&(d^y),s=(u>>>2|u<<30)^(u>>>13|u<<19)^(u>>>22|u<<10),c=u&h|l&(u^h),n=g+o+a+F0[f]+t[f],i=s+c,g=y,y=d,d=p,p=x+n>>>0,x=l,l=h,h=u,u=n+i>>>0;e.h0=e.h0+u|0,e.h1=e.h1+h|0,e.h2=e.h2+l|0,e.h3=e.h3+x|0,e.h4=e.h4+p|0,e.h5=e.h5+d|0,e.h6=e.h6+y|0,e.h7=e.h7+g|0,v-=64}}});var G0=pt((n2,z0)=>{var de=ht();Ct();var mi=null;de.util.isNodejs&&!de.options.usePureJavaScript&&!process.versions["node-webkit"]&&(mi=yi());var pl=z0.exports=de.prng=de.prng||{};pl.create=function(e){for(var t={plugin:e,key:null,seed:null,time:null,reseeds:0,generated:0,keyBytes:""},r=e.md,n=new Array(32),i=0;i<32;++i)n[i]=r.create();t.pools=n,t.pool=0,t.generate=function(f,u){if(!u)return t.generateSync(f);var h=t.plugin.cipher,l=t.plugin.increment,x=t.plugin.formatKey,p=t.plugin.formatSeed,d=de.util.createBuffer();t.key=null,y();function y(g){if(g)return u(g);if(d.length()>=f)return u(null,d.getBytes(f));if(t.generated>1048575&&(t.key=null),t.key===null)return de.util.nextTick(function(){s(y)});var v=h(t.key,t.seed);t.generated+=v.length,d.putBytes(v),t.key=x(h(t.key,l(t.seed))),t.seed=p(h(t.key,t.seed)),de.util.setImmediate(y)}},t.generateSync=function(f){var u=t.plugin.cipher,h=t.plugin.increment,l=t.plugin.formatKey,x=t.plugin.formatSeed;t.key=null;for(var p=de.util.createBuffer();p.length()1048575&&(t.key=null),t.key===null&&o();var d=u(t.key,t.seed);t.generated+=d.length,p.putBytes(d),t.key=l(u(t.key,h(t.seed))),t.seed=x(u(t.key,t.seed))}return p.getBytes(f)};function s(f){if(t.pools[0].messageLength>=32)return a(),f();var u=32-t.pools[0].messageLength<<5;t.seedFile(u,function(h,l){if(h)return f(h);t.collect(l),a(),f()})}function o(){if(t.pools[0].messageLength>=32)return a();var f=32-t.pools[0].messageLength<<5;t.collect(t.seedFileSync(f)),a()}function a(){t.reseeds=t.reseeds===4294967295?0:t.reseeds+1;var f=t.plugin.md.create();f.update(t.keyBytes);for(var u=1,h=0;h<32;++h)t.reseeds%u===0&&(f.update(t.pools[h].digest().getBytes()),t.pools[h].start()),u=u<<1;t.keyBytes=f.digest().getBytes(),f.start(),f.update(t.keyBytes);var l=f.digest().getBytes();t.key=t.plugin.formatKey(t.keyBytes),t.seed=t.plugin.formatSeed(l),t.generated=0}function c(f){var u=null,h=de.util.globalScope,l=h.crypto||h.msCrypto;l&&l.getRandomValues&&(u=function(S){return l.getRandomValues(S)});var x=de.util.createBuffer();if(u)for(;x.length()>16),v+=(g&32767)<<16,v+=g>>15,v=(v&2147483647)+(v>>31),C=v&4294967295;for(var y=0;y<3;++y)m=C>>>(y<<3),m^=Math.floor(Math.random()*256),x.putByte(m&255)}return x.getBytes(f)}return mi?(t.seedFile=function(f,u){mi.randomBytes(f,function(h,l){if(h)return u(h);u(null,l.toString())})},t.seedFileSync=function(f){return mi.randomBytes(f).toString()}):(t.seedFile=function(f,u){try{u(null,c(f))}catch(h){u(h)}},t.seedFileSync=c),t.collect=function(f){for(var u=f.length,h=0;h>l&255);t.collect(h)},t.registerWorker=function(f){if(f===self)t.seedFile=function(h,l){function x(p){var d=p.data;d.forge&&d.forge.prng&&(self.removeEventListener("message",x),l(d.forge.prng.err,d.forge.prng.bytes))}self.addEventListener("message",x),self.postMessage({forge:{prng:{needed:h}}})};else{var u=function(h){var l=h.data;l.forge&&l.forge.prng&&t.seedFile(l.forge.prng.needed,function(x,p){f.postMessage({forge:{prng:{err:x,bytes:p}}})})};f.addEventListener("message",u)}},t}});var pn=pt((i2,Fs)=>{var Pt=ht();Ms();q0();G0();Ct();(function(){if(Pt.random&&Pt.random.getBytes){Fs.exports=Pt.random;return}(function(e){var t={},r=new Array(4),n=Pt.util.createBuffer();t.formatKey=function(h){var l=Pt.util.createBuffer(h);return h=new Array(4),h[0]=l.getInt32(),h[1]=l.getInt32(),h[2]=l.getInt32(),h[3]=l.getInt32(),Pt.aes._expandKey(h,!1)},t.formatSeed=function(h){var l=Pt.util.createBuffer(h);return h=new Array(4),h[0]=l.getInt32(),h[1]=l.getInt32(),h[2]=l.getInt32(),h[3]=l.getInt32(),h},t.cipher=function(h,l){return Pt.aes._updateBlock(h,l,r,!1),n.putInt32(r[0]),n.putInt32(r[1]),n.putInt32(r[2]),n.putInt32(r[3]),n.getBytes()},t.increment=function(h){return++h[3],h},t.md=Pt.md.sha256;function i(){var h=Pt.prng.create(t);return h.getBytes=function(l,x){return h.generate(l,x)},h.getBytesSync=function(l){return h.generate(l)},h}var s=i(),o=null,a=Pt.util.globalScope,c=a.crypto||a.msCrypto;if(c&&c.getRandomValues&&(o=function(h){return c.getRandomValues(h)}),Pt.options.usePureJavaScript||!Pt.util.isNodejs&&!o){if(typeof window>"u"||window.document,s.collectInt(+new Date,32),typeof navigator<"u"){var f="";for(var u in navigator)try{typeof navigator[u]=="string"&&(f+=navigator[u])}catch{}s.collect(f),f=null}e&&(e().mousemove(function(h){s.collectInt(h.clientX,16),s.collectInt(h.clientY,16)}),e().keypress(function(h){s.collectInt(h.charCode,8)}))}if(!Pt.random)Pt.random=s;else for(var u in s)Pt.random[u]=s[u];Pt.random.createInstance=i,Fs.exports=Pt.random})(typeof jQuery<"u"?jQuery:null)})()});var Z0=pt((s2,$0)=>{var Yt=ht();Ct();var Hs=[217,120,249,196,25,221,181,237,40,233,253,121,74,160,216,157,198,126,55,131,43,118,83,142,98,76,100,136,68,139,251,162,23,154,89,245,135,179,79,19,97,69,109,141,9,129,125,50,189,143,64,235,134,183,123,11,240,149,33,34,92,107,78,130,84,214,101,147,206,96,178,28,115,86,192,20,167,140,241,220,18,117,202,31,59,190,228,209,66,61,212,48,163,60,182,38,111,191,14,218,70,105,7,87,39,242,29,155,188,148,67,3,248,17,199,246,144,239,62,231,6,195,213,47,200,102,30,215,8,232,234,222,128,82,238,247,132,170,114,172,53,77,106,42,150,26,210,113,90,21,73,116,75,159,208,94,4,24,164,236,194,224,65,110,15,81,203,204,36,145,175,80,161,244,112,57,153,124,58,133,35,184,180,122,252,2,54,91,37,85,151,49,45,93,250,152,227,138,146,174,5,223,41,16,103,108,186,201,211,0,230,207,225,158,168,44,99,22,1,63,88,226,137,169,13,56,52,27,171,51,255,176,187,72,12,95,185,177,205,46,197,243,219,71,229,165,156,119,10,166,32,104,254,127,193,173],Y0=[1,2,3,5],dl=function(e,t){return e<>16-t},yl=function(e,t){return(e&65535)>>t|e<<16-t&65535};$0.exports=Yt.rc2=Yt.rc2||{};Yt.rc2.expandKey=function(e,t){typeof e=="string"&&(e=Yt.util.createBuffer(e)),t=t||128;var r=e,n=e.length(),i=t,s=Math.ceil(i/8),o=255>>(i&7),a;for(a=n;a<128;a++)r.putByte(Hs[r.at(a-1)+r.at(a-n)&255]);for(r.setAt(128-s,Hs[r.at(128-s)&o]),a=127-s;a>=0;a--)r.setAt(a,Hs[r.at(a+1)^r.at(a+s)]);return r};var W0=function(e,t,r){var n=!1,i=null,s=null,o=null,a,c,f,u,h=[];for(e=Yt.rc2.expandKey(e,t),f=0;f<64;f++)h.push(e.getInt16Le());r?(a=function(p){for(f=0;f<4;f++)p[f]+=h[u]+(p[(f+3)%4]&p[(f+2)%4])+(~p[(f+3)%4]&p[(f+1)%4]),p[f]=dl(p[f],Y0[f]),u++},c=function(p){for(f=0;f<4;f++)p[f]+=h[p[(f+3)%4]&63]}):(a=function(p){for(f=3;f>=0;f--)p[f]=yl(p[f],Y0[f]),p[f]-=h[u]+(p[(f+3)%4]&p[(f+2)%4])+(~p[(f+3)%4]&p[(f+1)%4]),u--},c=function(p){for(f=3;f>=0;f--)p[f]-=h[p[(f+3)%4]&63]});var l=function(p){var d=[];for(f=0;f<4;f++){var y=i.getInt16Le();o!==null&&(r?y^=o.getInt16Le():o.putInt16Le(y)),d.push(y&65535)}u=r?0:63;for(var g=0;g=8;)l([[5,a],[1,c],[6,a],[1,c],[5,a]])},finish:function(p){var d=!0;if(r)if(p)d=p(8,i,!r);else{var y=i.length()===8?8:8-i.length();i.fillWithByte(y,y)}if(d&&(n=!0,x.update()),!r&&(d=i.length()===0,d))if(p)d=p(8,s,!r);else{var g=s.length(),v=s.at(g-1);v>g?d=!1:s.truncate(v)}return d}},x};Yt.rc2.startEncrypting=function(e,t,r){var n=Yt.rc2.createEncryptionCipher(e,128);return n.start(t,r),n};Yt.rc2.createEncryptionCipher=function(e,t){return W0(e,t,!0)};Yt.rc2.startDecrypting=function(e,t,r){var n=Yt.rc2.createDecryptionCipher(e,128);return n.start(t,r),n};Yt.rc2.createDecryptionCipher=function(e,t){return W0(e,t,!1)}});var wi=pt((o2,nc)=>{var qs=ht();nc.exports=qs.jsbn=qs.jsbn||{};var Ne,xl=0xdeadbeefcafe,X0=(xl&16777215)==15715070;function D(e,t,r){this.data=[],e!=null&&(typeof e=="number"?this.fromNumber(e,t,r):t==null&&typeof e!="string"?this.fromString(e,256):this.fromString(e,t))}qs.jsbn.BigInteger=D;function ot(){return new D(null)}function gl(e,t,r,n,i,s){for(;--s>=0;){var o=t*this.data[e++]+r.data[n]+i;i=Math.floor(o/67108864),r.data[n++]=o&67108863}return i}function ml(e,t,r,n,i,s){for(var o=t&32767,a=t>>15;--s>=0;){var c=this.data[e]&32767,f=this.data[e++]>>15,u=a*c+f*o;c=o*c+((u&32767)<<15)+r.data[n]+(i&1073741823),i=(c>>>30)+(u>>>15)+a*f+(i>>>30),r.data[n++]=c&1073741823}return i}function Q0(e,t,r,n,i,s){for(var o=t&16383,a=t>>14;--s>=0;){var c=this.data[e]&16383,f=this.data[e++]>>14,u=a*c+f*o;c=o*c+((u&16383)<<14)+r.data[n]+i,i=(c>>28)+(u>>14)+a*f,r.data[n++]=c&268435455}return i}typeof navigator>"u"?(D.prototype.am=Q0,Ne=28):X0&&navigator.appName=="Microsoft Internet Explorer"?(D.prototype.am=ml,Ne=30):X0&&navigator.appName!="Netscape"?(D.prototype.am=gl,Ne=26):(D.prototype.am=Q0,Ne=28);D.prototype.DB=Ne;D.prototype.DM=(1<=0;--t)e.data[t]=this.data[t];e.t=this.t,e.s=this.s}function wl(e){this.t=1,this.s=e<0?-1:0,e>0?this.data[0]=e:e<-1?this.data[0]=e+this.DV:this.t=0}function Ge(e){var t=ot();return t.fromInt(e),t}function El(e,t){var r;if(t==16)r=4;else if(t==8)r=3;else if(t==256)r=8;else if(t==2)r=1;else if(t==32)r=5;else if(t==4)r=2;else{this.fromRadix(e,t);return}this.t=0,this.s=0;for(var n=e.length,i=!1,s=0;--n>=0;){var o=r==8?e[n]&255:j0(e,n);if(o<0){e.charAt(n)=="-"&&(i=!0);continue}i=!1,s==0?this.data[this.t++]=o:s+r>this.DB?(this.data[this.t-1]|=(o&(1<>this.DB-s):this.data[this.t-1]|=o<=this.DB&&(s-=this.DB)}r==8&&e[0]&128&&(this.s=-1,s>0&&(this.data[this.t-1]|=(1<0&&this.data[this.t-1]==e;)--this.t}function Bl(e){if(this.s<0)return"-"+this.negate().toString(e);var t;if(e==16)t=4;else if(e==8)t=3;else if(e==2)t=1;else if(e==32)t=5;else if(e==4)t=2;else return this.toRadix(e);var r=(1<0)for(a>a)>0&&(i=!0,s=J0(n));o>=0;)a>(a+=this.DB-t)):(n=this.data[o]>>(a-=t)&r,a<=0&&(a+=this.DB,--o)),n>0&&(i=!0),i&&(s+=J0(n));return i?s:"0"}function Al(){var e=ot();return D.ZERO.subTo(this,e),e}function Cl(){return this.s<0?this.negate():this}function Il(e){var t=this.s-e.s;if(t!=0)return t;var r=this.t;if(t=r-e.t,t!=0)return this.s<0?-t:t;for(;--r>=0;)if((t=this.data[r]-e.data[r])!=0)return t;return 0}function vi(e){var t=1,r;return(r=e>>>16)!=0&&(e=r,t+=16),(r=e>>8)!=0&&(e=r,t+=8),(r=e>>4)!=0&&(e=r,t+=4),(r=e>>2)!=0&&(e=r,t+=2),(r=e>>1)!=0&&(e=r,t+=1),t}function Tl(){return this.t<=0?0:this.DB*(this.t-1)+vi(this.data[this.t-1]^this.s&this.DM)}function _l(e,t){var r;for(r=this.t-1;r>=0;--r)t.data[r+e]=this.data[r];for(r=e-1;r>=0;--r)t.data[r]=0;t.t=this.t+e,t.s=this.s}function Ll(e,t){for(var r=e;r=0;--a)t.data[a+s+1]=this.data[a]>>n|o,o=(this.data[a]&i)<=0;--a)t.data[a]=0;t.data[s]=o,t.t=this.t+s+1,t.s=this.s,t.clamp()}function Nl(e,t){t.s=this.s;var r=Math.floor(e/this.DB);if(r>=this.t){t.t=0;return}var n=e%this.DB,i=this.DB-n,s=(1<>n;for(var o=r+1;o>n;n>0&&(t.data[this.t-r-1]|=(this.s&s)<>=this.DB;if(e.t>=this.DB;n+=this.s}else{for(n+=this.s;r>=this.DB;n-=e.s}t.s=n<0?-1:0,n<-1?t.data[r++]=this.DV+n:n>0&&(t.data[r++]=n),t.t=r,t.clamp()}function Pl(e,t){var r=this.abs(),n=e.abs(),i=r.t;for(t.t=i+n.t;--i>=0;)t.data[i]=0;for(i=0;i=0;)e.data[r]=0;for(r=0;r=t.DV&&(e.data[r+t.t]-=t.DV,e.data[r+t.t+1]=1)}e.t>0&&(e.data[e.t-1]+=t.am(r,t.data[r],e,2*r,0,1)),e.s=0,e.clamp()}function Ul(e,t,r){var n=e.abs();if(!(n.t<=0)){var i=this.abs();if(i.t0?(n.lShiftTo(c,s),i.lShiftTo(c,r)):(n.copyTo(s),i.copyTo(r));var f=s.t,u=s.data[f-1];if(u!=0){var h=u*(1<1?s.data[f-2]>>this.F2:0),l=this.FV/h,x=(1<=0&&(r.data[r.t++]=1,r.subTo(g,r)),D.ONE.dlShiftTo(f,g),g.subTo(s,s);s.t=0;){var v=r.data[--d]==u?this.DM:Math.floor(r.data[d]*l+(r.data[d-1]+p)*x);if((r.data[d]+=s.am(0,v,r,y,0,f))0&&r.rShiftTo(c,r),o<0&&D.ZERO.subTo(r,r)}}}function Kl(e){var t=ot();return this.abs().divRemTo(e,null,t),this.s<0&&t.compareTo(D.ZERO)>0&&e.subTo(t,t),t}function sr(e){this.m=e}function Ol(e){return e.s<0||e.compareTo(this.m)>=0?e.mod(this.m):e}function Ml(e){return e}function Vl(e){e.divRemTo(this.m,null,e)}function Fl(e,t,r){e.multiplyTo(t,r),this.reduce(r)}function Hl(e,t){e.squareTo(t),this.reduce(t)}sr.prototype.convert=Ol;sr.prototype.revert=Ml;sr.prototype.reduce=Vl;sr.prototype.mulTo=Fl;sr.prototype.sqrTo=Hl;function ql(){if(this.t<1)return 0;var e=this.data[0];if(!(e&1))return 0;var t=e&3;return t=t*(2-(e&15)*t)&15,t=t*(2-(e&255)*t)&255,t=t*(2-((e&65535)*t&65535))&65535,t=t*(2-e*t%this.DV)%this.DV,t>0?this.DV-t:-t}function or(e){this.m=e,this.mp=e.invDigit(),this.mpl=this.mp&32767,this.mph=this.mp>>15,this.um=(1<0&&this.m.subTo(t,t),t}function Gl(e){var t=ot();return e.copyTo(t),this.reduce(t),t}function Yl(e){for(;e.t<=this.mt2;)e.data[e.t++]=0;for(var t=0;t>15)*this.mpl&this.um)<<15)&e.DM;for(r=t+this.m.t,e.data[r]+=this.m.am(0,n,e,t,0,this.m.t);e.data[r]>=e.DV;)e.data[r]-=e.DV,e.data[++r]++}e.clamp(),e.drShiftTo(this.m.t,e),e.compareTo(this.m)>=0&&e.subTo(this.m,e)}function Wl(e,t){e.squareTo(t),this.reduce(t)}function $l(e,t,r){e.multiplyTo(t,r),this.reduce(r)}or.prototype.convert=zl;or.prototype.revert=Gl;or.prototype.reduce=Yl;or.prototype.mulTo=$l;or.prototype.sqrTo=Wl;function Zl(){return(this.t>0?this.data[0]&1:this.s)==0}function Xl(e,t){if(e>4294967295||e<1)return D.ONE;var r=ot(),n=ot(),i=t.convert(this),s=vi(e)-1;for(i.copyTo(r);--s>=0;)if(t.sqrTo(r,n),(e&1<0)t.mulTo(n,i,r);else{var o=r;r=n,n=o}return t.revert(r)}function Ql(e,t){var r;return e<256||t.isEven()?r=new sr(t):r=new or(t),this.exp(e,r)}D.prototype.copyTo=vl;D.prototype.fromInt=wl;D.prototype.fromString=El;D.prototype.clamp=Sl;D.prototype.dlShiftTo=_l;D.prototype.drShiftTo=Ll;D.prototype.lShiftTo=Rl;D.prototype.rShiftTo=Nl;D.prototype.subTo=Dl;D.prototype.multiplyTo=Pl;D.prototype.squareTo=kl;D.prototype.divRemTo=Ul;D.prototype.invDigit=ql;D.prototype.isEven=Zl;D.prototype.exp=Xl;D.prototype.toString=Bl;D.prototype.negate=Al;D.prototype.abs=Cl;D.prototype.compareTo=Il;D.prototype.bitLength=Tl;D.prototype.mod=Kl;D.prototype.modPowInt=Ql;D.ZERO=Ge(0);D.ONE=Ge(1);function Jl(){var e=ot();return this.copyTo(e),e}function jl(){if(this.s<0){if(this.t==1)return this.data[0]-this.DV;if(this.t==0)return-1}else{if(this.t==1)return this.data[0];if(this.t==0)return 0}return(this.data[1]&(1<<32-this.DB)-1)<>24}function ep(){return this.t==0?this.s:this.data[0]<<16>>16}function rp(e){return Math.floor(Math.LN2*this.DB/Math.log(e))}function np(){return this.s<0?-1:this.t<=0||this.t==1&&this.data[0]<=0?0:1}function ip(e){if(e==null&&(e=10),this.signum()==0||e<2||e>36)return"0";var t=this.chunkSize(e),r=Math.pow(e,t),n=Ge(r),i=ot(),s=ot(),o="";for(this.divRemTo(n,i,s);i.signum()>0;)o=(r+s.intValue()).toString(e).substr(1)+o,i.divRemTo(n,i,s);return s.intValue().toString(e)+o}function sp(e,t){this.fromInt(0),t==null&&(t=10);for(var r=this.chunkSize(t),n=Math.pow(t,r),i=!1,s=0,o=0,a=0;a=r&&(this.dMultiply(n),this.dAddOffset(o,0),s=0,o=0)}s>0&&(this.dMultiply(Math.pow(t,s)),this.dAddOffset(o,0)),i&&D.ZERO.subTo(this,this)}function op(e,t,r){if(typeof t=="number")if(e<2)this.fromInt(1);else for(this.fromNumber(e,r),this.testBit(e-1)||this.bitwiseTo(D.ONE.shiftLeft(e-1),Gs,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(t);)this.dAddOffset(2,0),this.bitLength()>e&&this.subTo(D.ONE.shiftLeft(e-1),this);else{var n=new Array,i=e&7;n.length=(e>>3)+1,t.nextBytes(n),i>0?n[0]&=(1<0)for(r>r)!=(this.s&this.DM)>>r&&(t[i++]=n|this.s<=0;)r<8?(n=(this.data[e]&(1<>(r+=this.DB-8)):(n=this.data[e]>>(r-=8)&255,r<=0&&(r+=this.DB,--e)),n&128&&(n|=-256),i==0&&(this.s&128)!=(n&128)&&++i,(i>0||n!=this.s)&&(t[i++]=n);return t}function cp(e){return this.compareTo(e)==0}function fp(e){return this.compareTo(e)<0?this:e}function up(e){return this.compareTo(e)>0?this:e}function hp(e,t,r){var n,i,s=Math.min(e.t,this.t);for(n=0;n>=16,t+=16),e&255||(e>>=8,t+=8),e&15||(e>>=4,t+=4),e&3||(e>>=2,t+=2),e&1||++t,t}function wp(){for(var e=0;e=this.t?this.s!=0:(this.data[t]&1<>=this.DB;if(e.t>=this.DB;n+=this.s}else{for(n+=this.s;r>=this.DB;n+=e.s}t.s=n<0?-1:0,n>0?t.data[r++]=n:n<-1&&(t.data[r++]=this.DV+n),t.t=r,t.clamp()}function Lp(e){var t=ot();return this.addTo(e,t),t}function Rp(e){var t=ot();return this.subTo(e,t),t}function Np(e){var t=ot();return this.multiplyTo(e,t),t}function Dp(e){var t=ot();return this.divRemTo(e,t,null),t}function Pp(e){var t=ot();return this.divRemTo(e,null,t),t}function kp(e){var t=ot(),r=ot();return this.divRemTo(e,t,r),new Array(t,r)}function Up(e){this.data[this.t]=this.am(0,e-1,this,0,0,this.t),++this.t,this.clamp()}function Kp(e,t){if(e!=0){for(;this.t<=t;)this.data[this.t++]=0;for(this.data[t]+=e;this.data[t]>=this.DV;)this.data[t]-=this.DV,++t>=this.t&&(this.data[this.t++]=0),++this.data[t]}}function dn(){}function rc(e){return e}function Op(e,t,r){e.multiplyTo(t,r)}function Mp(e,t){e.squareTo(t)}dn.prototype.convert=rc;dn.prototype.revert=rc;dn.prototype.mulTo=Op;dn.prototype.sqrTo=Mp;function Vp(e){return this.exp(e,new dn)}function Fp(e,t,r){var n=Math.min(this.t+e.t,t);for(r.s=0,r.t=n;n>0;)r.data[--n]=0;var i;for(i=r.t-this.t;n=0;)r.data[n]=0;for(n=Math.max(t-this.t,0);n2*this.m.t)return e.mod(this.m);if(e.compareTo(this.m)<0)return e;var t=ot();return e.copyTo(t),this.reduce(t),t}function zp(e){return e}function Gp(e){for(e.drShiftTo(this.m.t-1,this.r2),e.t>this.m.t+1&&(e.t=this.m.t+1,e.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);e.compareTo(this.r2)<0;)e.dAddOffset(1,this.m.t+1);for(e.subTo(this.r2,e);e.compareTo(this.m)>=0;)e.subTo(this.m,e)}function Yp(e,t){e.squareTo(t),this.reduce(t)}function Wp(e,t,r){e.multiplyTo(t,r),this.reduce(r)}Pr.prototype.convert=qp;Pr.prototype.revert=zp;Pr.prototype.reduce=Gp;Pr.prototype.mulTo=Wp;Pr.prototype.sqrTo=Yp;function $p(e,t){var r=e.bitLength(),n,i=Ge(1),s;if(r<=0)return i;r<18?n=1:r<48?n=3:r<144?n=4:r<768?n=5:n=6,r<8?s=new sr(t):t.isEven()?s=new Pr(t):s=new or(t);var o=new Array,a=3,c=n-1,f=(1<1){var u=ot();for(s.sqrTo(o[1],u);a<=f;)o[a]=ot(),s.mulTo(u,o[a-2],o[a]),a+=2}var h=e.t-1,l,x=!0,p=ot(),d;for(r=vi(e.data[h])-1;h>=0;){for(r>=c?l=e.data[h]>>r-c&f:(l=(e.data[h]&(1<0&&(l|=e.data[h-1]>>this.DB+r-c)),a=n;!(l&1);)l>>=1,--a;if((r-=a)<0&&(r+=this.DB,--h),x)o[l].copyTo(i),x=!1;else{for(;a>1;)s.sqrTo(i,p),s.sqrTo(p,i),a-=2;a>0?s.sqrTo(i,p):(d=i,i=p,p=d),s.mulTo(p,o[l],i)}for(;h>=0&&!(e.data[h]&1<0&&(t.rShiftTo(s,t),r.rShiftTo(s,r));t.signum()>0;)(i=t.getLowestSetBit())>0&&t.rShiftTo(i,t),(i=r.getLowestSetBit())>0&&r.rShiftTo(i,r),t.compareTo(r)>=0?(t.subTo(r,t),t.rShiftTo(1,t)):(r.subTo(t,r),r.rShiftTo(1,r));return s>0&&r.lShiftTo(s,r),r}function Xp(e){if(e<=0)return 0;var t=this.DV%e,r=this.s<0?e-1:0;if(this.t>0)if(t==0)r=this.data[0]%e;else for(var n=this.t-1;n>=0;--n)r=(t*r+this.data[n])%e;return r}function Qp(e){var t=e.isEven();if(this.isEven()&&t||e.signum()==0)return D.ZERO;for(var r=e.clone(),n=this.clone(),i=Ge(1),s=Ge(0),o=Ge(0),a=Ge(1);r.signum()!=0;){for(;r.isEven();)r.rShiftTo(1,r),t?((!i.isEven()||!s.isEven())&&(i.addTo(this,i),s.subTo(e,s)),i.rShiftTo(1,i)):s.isEven()||s.subTo(e,s),s.rShiftTo(1,s);for(;n.isEven();)n.rShiftTo(1,n),t?((!o.isEven()||!a.isEven())&&(o.addTo(this,o),a.subTo(e,a)),o.rShiftTo(1,o)):a.isEven()||a.subTo(e,a),a.rShiftTo(1,a);r.compareTo(n)>=0?(r.subTo(n,r),t&&i.subTo(o,i),s.subTo(a,s)):(n.subTo(r,n),t&&o.subTo(i,o),a.subTo(s,a))}if(n.compareTo(D.ONE)!=0)return D.ZERO;if(a.compareTo(e)>=0)return a.subtract(e);if(a.signum()<0)a.addTo(e,a);else return a;return a.signum()<0?a.add(e):a}var ce=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509],Jp=(1<<26)/ce[ce.length-1];function jp(e){var t,r=this.abs();if(r.t==1&&r.data[0]<=ce[ce.length-1]){for(t=0;t=0);var a=s.modPow(n,this);if(a.compareTo(D.ONE)!=0&&a.compareTo(t)!=0){for(var c=1;c++{var ye=ht();ir();Ct();var sc=ac.exports=ye.sha1=ye.sha1||{};ye.md.sha1=ye.md.algorithms.sha1=sc;sc.create=function(){oc||rd();var e=null,t=ye.util.createBuffer(),r=new Array(80),n={algorithm:"sha1",blockLength:64,digestLength:20,messageLength:0,fullMessageLength:null,messageLengthSize:8};return n.start=function(){n.messageLength=0,n.fullMessageLength=n.messageLength64=[];for(var i=n.messageLengthSize/4,s=0;s>>0,o>>>0];for(var a=n.fullMessageLength.length-1;a>=0;--a)n.fullMessageLength[a]+=o[1],o[1]=o[0]+(n.fullMessageLength[a]/4294967296>>>0),n.fullMessageLength[a]=n.fullMessageLength[a]>>>0,o[0]=o[1]/4294967296>>>0;return t.putBytes(i),ic(e,r,t),(t.read>2048||t.length()===0)&&t.compact(),n},n.digest=function(){var i=ye.util.createBuffer();i.putBytes(t.bytes());var s=n.fullMessageLength[n.fullMessageLength.length-1]+n.messageLengthSize,o=s&n.blockLength-1;i.putBytes(Ys.substr(0,n.blockLength-o));for(var a,c,f=n.fullMessageLength[0]*8,u=0;u>>0,f+=c,i.putInt32(f>>>0),f=a>>>0;i.putInt32(f);var h={h0:e.h0,h1:e.h1,h2:e.h2,h3:e.h3,h4:e.h4};ic(h,r,i);var l=ye.util.createBuffer();return l.putInt32(h.h0),l.putInt32(h.h1),l.putInt32(h.h2),l.putInt32(h.h3),l.putInt32(h.h4),l},n};var Ys=null,oc=!1;function rd(){Ys="\x80",Ys+=ye.util.fillString("\0",64),oc=!0}function ic(e,t,r){for(var n,i,s,o,a,c,f,u,h=r.length();h>=64;){for(i=e.h0,s=e.h1,o=e.h2,a=e.h3,c=e.h4,u=0;u<16;++u)n=r.getInt32(),t[u]=n,f=a^s&(o^a),n=(i<<5|i>>>27)+f+c+1518500249+n,c=a,a=o,o=(s<<30|s>>>2)>>>0,s=i,i=n;for(;u<20;++u)n=t[u-3]^t[u-8]^t[u-14]^t[u-16],n=n<<1|n>>>31,t[u]=n,f=a^s&(o^a),n=(i<<5|i>>>27)+f+c+1518500249+n,c=a,a=o,o=(s<<30|s>>>2)>>>0,s=i,i=n;for(;u<32;++u)n=t[u-3]^t[u-8]^t[u-14]^t[u-16],n=n<<1|n>>>31,t[u]=n,f=s^o^a,n=(i<<5|i>>>27)+f+c+1859775393+n,c=a,a=o,o=(s<<30|s>>>2)>>>0,s=i,i=n;for(;u<40;++u)n=t[u-6]^t[u-16]^t[u-28]^t[u-32],n=n<<2|n>>>30,t[u]=n,f=s^o^a,n=(i<<5|i>>>27)+f+c+1859775393+n,c=a,a=o,o=(s<<30|s>>>2)>>>0,s=i,i=n;for(;u<60;++u)n=t[u-6]^t[u-16]^t[u-28]^t[u-32],n=n<<2|n>>>30,t[u]=n,f=s&o|a&(s^o),n=(i<<5|i>>>27)+f+c+2400959708+n,c=a,a=o,o=(s<<30|s>>>2)>>>0,s=i,i=n;for(;u<80;++u)n=t[u-6]^t[u-16]^t[u-28]^t[u-32],n=n<<2|n>>>30,t[u]=n,f=s^o^a,n=(i<<5|i>>>27)+f+c+3395469782+n,c=a,a=o,o=(s<<30|s>>>2)>>>0,s=i,i=n;e.h0=e.h0+i|0,e.h1=e.h1+s|0,e.h2=e.h2+o|0,e.h3=e.h3+a|0,e.h4=e.h4+c|0,h-=64}}});var hc=pt((c2,uc)=>{var xe=ht();Ct();pn();cc();var fc=uc.exports=xe.pkcs1=xe.pkcs1||{};fc.encode_rsa_oaep=function(e,t,r){var n,i,s,o;typeof r=="string"?(n=r,i=arguments[3]||void 0,s=arguments[4]||void 0):r&&(n=r.label||void 0,i=r.seed||void 0,s=r.md||void 0,r.mgf1&&r.mgf1.md&&(o=r.mgf1.md)),s?s.start():s=xe.md.sha1.create(),o||(o=s);var a=Math.ceil(e.n.bitLength()/8),c=a-2*s.digestLength-2;if(t.length>c){var f=new Error("RSAES-OAEP input message length is too long.");throw f.length=t.length,f.maxLength=c,f}n||(n=""),s.update(n,"raw");for(var u=s.digest(),h="",l=c-t.length,x=0;x>24&255,s>>16&255,s>>8&255,s&255);r.start(),r.update(e+o),n+=r.digest().getBytes()}return n.substring(0,t)}});var lc=pt((f2,Ws)=>{var Ye=ht();Ct();wi();pn();(function(){if(Ye.prime){Ws.exports=Ye.prime;return}var e=Ws.exports=Ye.prime=Ye.prime||{},t=Ye.jsbn.BigInteger,r=[6,4,2,4,2,4,6,2],n=new t(null);n.fromInt(30);var i=function(h,l){return h|l};e.generateProbablePrime=function(h,l,x){typeof l=="function"&&(x=l,l={}),l=l||{};var p=l.algorithm||"PRIMEINC";typeof p=="string"&&(p={name:p}),p.options=p.options||{};var d=l.prng||Ye.random,y={nextBytes:function(g){for(var v=d.getBytesSync(g.length),m=0;ml&&(h=f(l,x)),h.isProbablePrime(d))return g(null,h);h.dAddOffset(r[p++%8],0)}while(y<0||+new Date-v"u")return o(h,l,x,p);var d=f(h,l),y=x.workers,g=x.workLoad||100,v=g*30/8,m=x.workerScript||"forge/prime.worker.js";if(y===-1)return Ye.util.estimateCores(function(S,B){S&&(B=2),y=B-1,C()});C();function C(){y=Math.max(1,y);for(var S=[],B=0;Bh&&(d=f(h,l));var z=d.toString(16);M.target.postMessage({hex:z,workLoad:g}),d.dAddOffset(v,0)}}}}function f(h,l){var x=new t(h,l),p=h-1;return x.testBit(p)||x.bitwiseTo(t.ONE.shiftLeft(p),i,x),x.dAddOffset(31-x.mod(n).byteValue(),0),x}function u(h){return h<=100?27:h<=150?18:h<=200?15:h<=250?12:h<=300?9:h<=350?8:h<=400?7:h<=500?6:h<=600?5:h<=800?4:h<=1250?3:2}})()});var Bi=pt((u2,bc)=>{var Y=ht();ln();wi();ci();hc();lc();pn();Ct();typeof st>"u"&&(st=Y.jsbn.BigInteger);var st,$s=Y.util.isNodejs?yi():null,E=Y.asn1,te=Y.util;Y.pki=Y.pki||{};bc.exports=Y.pki.rsa=Y.rsa=Y.rsa||{};var Q=Y.pki,nd=[6,4,2,4,2,4,6,2],id={name:"PrivateKeyInfo",tagClass:E.Class.UNIVERSAL,type:E.Type.SEQUENCE,constructed:!0,value:[{name:"PrivateKeyInfo.version",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"privateKeyVersion"},{name:"PrivateKeyInfo.privateKeyAlgorithm",tagClass:E.Class.UNIVERSAL,type:E.Type.SEQUENCE,constructed:!0,value:[{name:"AlgorithmIdentifier.algorithm",tagClass:E.Class.UNIVERSAL,type:E.Type.OID,constructed:!1,capture:"privateKeyOid"}]},{name:"PrivateKeyInfo",tagClass:E.Class.UNIVERSAL,type:E.Type.OCTETSTRING,constructed:!1,capture:"privateKey"}]},sd={name:"RSAPrivateKey",tagClass:E.Class.UNIVERSAL,type:E.Type.SEQUENCE,constructed:!0,value:[{name:"RSAPrivateKey.version",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"privateKeyVersion"},{name:"RSAPrivateKey.modulus",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"privateKeyModulus"},{name:"RSAPrivateKey.publicExponent",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"privateKeyPublicExponent"},{name:"RSAPrivateKey.privateExponent",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"privateKeyPrivateExponent"},{name:"RSAPrivateKey.prime1",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"privateKeyPrime1"},{name:"RSAPrivateKey.prime2",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"privateKeyPrime2"},{name:"RSAPrivateKey.exponent1",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"privateKeyExponent1"},{name:"RSAPrivateKey.exponent2",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"privateKeyExponent2"},{name:"RSAPrivateKey.coefficient",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"privateKeyCoefficient"}]},od={name:"RSAPublicKey",tagClass:E.Class.UNIVERSAL,type:E.Type.SEQUENCE,constructed:!0,value:[{name:"RSAPublicKey.modulus",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"publicKeyModulus"},{name:"RSAPublicKey.exponent",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"publicKeyExponent"}]},ad=Y.pki.rsa.publicKeyValidator={name:"SubjectPublicKeyInfo",tagClass:E.Class.UNIVERSAL,type:E.Type.SEQUENCE,constructed:!0,captureAsn1:"subjectPublicKeyInfo",value:[{name:"SubjectPublicKeyInfo.AlgorithmIdentifier",tagClass:E.Class.UNIVERSAL,type:E.Type.SEQUENCE,constructed:!0,value:[{name:"AlgorithmIdentifier.algorithm",tagClass:E.Class.UNIVERSAL,type:E.Type.OID,constructed:!1,capture:"publicKeyOid"}]},{name:"SubjectPublicKeyInfo.subjectPublicKey",tagClass:E.Class.UNIVERSAL,type:E.Type.BITSTRING,constructed:!1,value:[{name:"SubjectPublicKeyInfo.subjectPublicKey.RSAPublicKey",tagClass:E.Class.UNIVERSAL,type:E.Type.SEQUENCE,constructed:!0,optional:!0,captureAsn1:"rsaPublicKey"}]}]},cd={name:"DigestInfo",tagClass:E.Class.UNIVERSAL,type:E.Type.SEQUENCE,constructed:!0,value:[{name:"DigestInfo.DigestAlgorithm",tagClass:E.Class.UNIVERSAL,type:E.Type.SEQUENCE,constructed:!0,value:[{name:"DigestInfo.DigestAlgorithm.algorithmIdentifier",tagClass:E.Class.UNIVERSAL,type:E.Type.OID,constructed:!1,capture:"algorithmIdentifier"},{name:"DigestInfo.DigestAlgorithm.parameters",tagClass:E.Class.UNIVERSAL,type:E.Type.NULL,capture:"parameters",optional:!0,constructed:!1}]},{name:"DigestInfo.digest",tagClass:E.Class.UNIVERSAL,type:E.Type.OCTETSTRING,constructed:!1,capture:"digest"}]},fd=function(e){var t;if(e.algorithm in Q.oids)t=Q.oids[e.algorithm];else{var r=new Error("Unknown message digest algorithm.");throw r.algorithm=e.algorithm,r}var n=E.oidToDer(t).getBytes(),i=E.create(E.Class.UNIVERSAL,E.Type.SEQUENCE,!0,[]),s=E.create(E.Class.UNIVERSAL,E.Type.SEQUENCE,!0,[]);s.value.push(E.create(E.Class.UNIVERSAL,E.Type.OID,!1,n)),s.value.push(E.create(E.Class.UNIVERSAL,E.Type.NULL,!1,""));var o=E.create(E.Class.UNIVERSAL,E.Type.OCTETSTRING,!1,e.digest().getBytes());return i.value.push(s),i.value.push(o),E.toDer(i).getBytes()},gc=function(e,t,r){if(r)return e.modPow(t.e,t.n);if(!t.p||!t.q)return e.modPow(t.d,t.n);t.dP||(t.dP=t.d.mod(t.p.subtract(st.ONE))),t.dQ||(t.dQ=t.d.mod(t.q.subtract(st.ONE))),t.qInv||(t.qInv=t.q.modInverse(t.p));var n;do n=new st(Y.util.bytesToHex(Y.random.getBytes(t.n.bitLength()/8)),16);while(n.compareTo(t.n)>=0||!n.gcd(t.n).equals(st.ONE));e=e.multiply(n.modPow(t.e,t.n)).mod(t.n);for(var i=e.mod(t.p).modPow(t.dP,t.p),s=e.mod(t.q).modPow(t.dQ,t.q);i.compareTo(s)<0;)i=i.add(t.p);var o=i.subtract(s).multiply(t.qInv).mod(t.p).multiply(t.q).add(s);return o=o.multiply(n.modInverse(t.n)).mod(t.n),o};Q.rsa.encrypt=function(e,t,r){var n=r,i,s=Math.ceil(t.n.bitLength()/8);r!==!1&&r!==!0?(n=r===2,i=mc(e,t,r)):(i=Y.util.createBuffer(),i.putBytes(e));for(var o=new st(i.toHex(),16),a=gc(o,t,n),c=a.toString(16),f=Y.util.createBuffer(),u=s-Math.ceil(c.length/2);u>0;)f.putByte(0),--u;return f.putBytes(Y.util.hexToBytes(c)),f.getBytes()};Q.rsa.decrypt=function(e,t,r,n){var i=Math.ceil(t.n.bitLength()/8);if(e.length!==i){var s=new Error("Encrypted message length is invalid.");throw s.length=e.length,s.expected=i,s}var o=new st(Y.util.createBuffer(e).toHex(),16);if(o.compareTo(t.n)>=0)throw new Error("Encrypted message is invalid.");for(var a=gc(o,t,r),c=a.toString(16),f=Y.util.createBuffer(),u=i-Math.ceil(c.length/2);u>0;)f.putByte(0),--u;return f.putBytes(Y.util.hexToBytes(c)),n!==!1?Si(f.getBytes(),t,r):f.getBytes()};Q.rsa.createKeyPairGenerationState=function(e,t,r){typeof e=="string"&&(e=parseInt(e,10)),e=e||2048,r=r||{};var n=r.prng||Y.random,i={nextBytes:function(a){for(var c=n.getBytesSync(a.length),f=0;f>1,pBits:e-(e>>1),pqState:0,num:null,keys:null},o.e.fromInt(o.eInt);else throw new Error("Invalid key generation algorithm: "+s);return o};Q.rsa.stepKeyPairGenerationState=function(e,t){"algorithm"in e||(e.algorithm="PRIMEINC");var r=new st(null);r.fromInt(30);for(var n=0,i=function(h,l){return h|l},s=+new Date,o,a=0;e.keys===null&&(t<=0||ac?e.pqState=0:e.num.isProbablePrime(hd(e.num.bitLength()))?++e.pqState:e.num.dAddOffset(nd[n++%8],0):e.pqState===2?e.pqState=e.num.subtract(st.ONE).gcd(e.e).compareTo(st.ONE)===0?3:0:e.pqState===3&&(e.pqState=0,e.p===null?e.p=e.num:e.q=e.num,e.p!==null&&e.q!==null&&++e.state,e.num=null)}else if(e.state===1)e.p.compareTo(e.q)<0&&(e.num=e.p,e.p=e.q,e.q=e.num),++e.state;else if(e.state===2)e.p1=e.p.subtract(st.ONE),e.q1=e.q.subtract(st.ONE),e.phi=e.p1.multiply(e.q1),++e.state;else if(e.state===3)e.phi.gcd(e.e).compareTo(st.ONE)===0?++e.state:(e.p=null,e.q=null,e.state=0);else if(e.state===4)e.n=e.p.multiply(e.q),e.n.bitLength()===e.bits?++e.state:(e.q=null,e.state=0);else if(e.state===5){var u=e.e.modInverse(e.phi);e.keys={privateKey:Q.rsa.setPrivateKey(e.n,e.e,u,e.p,e.q,u.mod(e.p1),u.mod(e.q1),e.q.modInverse(e.p)),publicKey:Q.rsa.setPublicKey(e.n,e.e)}}o=+new Date,a+=o-s,s=o}return e.keys!==null};Q.rsa.generateKeyPair=function(e,t,r,n){if(arguments.length===1?typeof e=="object"?(r=e,e=void 0):typeof e=="function"&&(n=e,e=void 0):arguments.length===2?typeof e=="number"?typeof t=="function"?(n=t,t=void 0):typeof t!="number"&&(r=t,t=void 0):(r=e,n=t,e=void 0,t=void 0):arguments.length===3&&(typeof t=="number"?typeof r=="function"&&(n=r,r=void 0):(n=r,r=t,t=void 0)),r=r||{},e===void 0&&(e=r.bits||2048),t===void 0&&(t=r.e||65537),!Y.options.usePureJavaScript&&!r.prng&&e>=256&&e<=16384&&(t===65537||t===3)){if(n){if(pc("generateKeyPair"))return $s.generateKeyPair("rsa",{modulusLength:e,publicExponent:t,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}},function(a,c,f){if(a)return n(a);n(null,{privateKey:Q.privateKeyFromPem(f),publicKey:Q.publicKeyFromPem(c)})});if(dc("generateKey")&&dc("exportKey"))return te.globalScope.crypto.subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:e,publicExponent:xc(t),hash:{name:"SHA-256"}},!0,["sign","verify"]).then(function(a){return te.globalScope.crypto.subtle.exportKey("pkcs8",a.privateKey)}).then(void 0,function(a){n(a)}).then(function(a){if(a){var c=Q.privateKeyFromAsn1(E.fromDer(Y.util.createBuffer(a)));n(null,{privateKey:c,publicKey:Q.setRsaPublicKey(c.n,c.e)})}});if(yc("generateKey")&&yc("exportKey")){var i=te.globalScope.msCrypto.subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:e,publicExponent:xc(t),hash:{name:"SHA-256"}},!0,["sign","verify"]);i.oncomplete=function(a){var c=a.target.result,f=te.globalScope.msCrypto.subtle.exportKey("pkcs8",c.privateKey);f.oncomplete=function(u){var h=u.target.result,l=Q.privateKeyFromAsn1(E.fromDer(Y.util.createBuffer(h)));n(null,{privateKey:l,publicKey:Q.setRsaPublicKey(l.n,l.e)})},f.onerror=function(u){n(u)}},i.onerror=function(a){n(a)};return}}else if(pc("generateKeyPairSync")){var s=$s.generateKeyPairSync("rsa",{modulusLength:e,publicExponent:t,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{privateKey:Q.privateKeyFromPem(s.privateKey),publicKey:Q.publicKeyFromPem(s.publicKey)}}}var o=Q.rsa.createKeyPairGenerationState(e,t,r);if(!n)return Q.rsa.stepKeyPairGenerationState(o,0),o.keys;ud(o,r,n)};Q.setRsaPublicKey=Q.rsa.setPublicKey=function(e,t){var r={n:e,e:t};return r.encrypt=function(n,i,s){if(typeof i=="string"?i=i.toUpperCase():i===void 0&&(i="RSAES-PKCS1-V1_5"),i==="RSAES-PKCS1-V1_5")i={encode:function(a,c,f){return mc(a,c,2).getBytes()}};else if(i==="RSA-OAEP"||i==="RSAES-OAEP")i={encode:function(a,c){return Y.pkcs1.encode_rsa_oaep(c,a,s)}};else if(["RAW","NONE","NULL",null].indexOf(i)!==-1)i={encode:function(a){return a}};else if(typeof i=="string")throw new Error('Unsupported encryption scheme: "'+i+'".');var o=i.encode(n,r,!0);return Q.rsa.encrypt(o,r,!0)},r.verify=function(n,i,s,o){typeof s=="string"?s=s.toUpperCase():s===void 0&&(s="RSASSA-PKCS1-V1_5"),o===void 0&&(o={_parseAllDigestBytes:!0}),"_parseAllDigestBytes"in o||(o._parseAllDigestBytes=!0),s==="RSASSA-PKCS1-V1_5"?s={verify:function(c,f){f=Si(f,r,!0);var u=E.fromDer(f,{parseAllBytes:o._parseAllDigestBytes}),h={},l=[];if(!E.validate(u,cd,h,l)){var x=new Error("ASN.1 object does not contain a valid RSASSA-PKCS1-v1_5 DigestInfo value.");throw x.errors=l,x}var p=E.derToOid(h.algorithmIdentifier);if(!(p===Y.oids.md2||p===Y.oids.md5||p===Y.oids.sha1||p===Y.oids.sha224||p===Y.oids.sha256||p===Y.oids.sha384||p===Y.oids.sha512||p===Y.oids["sha512-224"]||p===Y.oids["sha512-256"])){var x=new Error("Unknown RSASSA-PKCS1-v1_5 DigestAlgorithm identifier.");throw x.oid=p,x}if((p===Y.oids.md2||p===Y.oids.md5)&&!("parameters"in h))throw new Error("ASN.1 object does not contain a valid RSASSA-PKCS1-v1_5 DigestInfo value. Missing algorithm identifer NULL parameters.");return c===h.digest}}:(s==="NONE"||s==="NULL"||s===null)&&(s={verify:function(c,f){return f=Si(f,r,!0),c===f}});var a=Q.rsa.decrypt(i,r,!0,!1);return s.verify(n,a,r.n.bitLength())},r};Q.setRsaPrivateKey=Q.rsa.setPrivateKey=function(e,t,r,n,i,s,o,a){var c={n:e,e:t,d:r,p:n,q:i,dP:s,dQ:o,qInv:a};return c.decrypt=function(f,u,h){typeof u=="string"?u=u.toUpperCase():u===void 0&&(u="RSAES-PKCS1-V1_5");var l=Q.rsa.decrypt(f,c,!1,!1);if(u==="RSAES-PKCS1-V1_5")u={decode:Si};else if(u==="RSA-OAEP"||u==="RSAES-OAEP")u={decode:function(x,p){return Y.pkcs1.decode_rsa_oaep(p,x,h)}};else if(["RAW","NONE","NULL",null].indexOf(u)!==-1)u={decode:function(x){return x}};else throw new Error('Unsupported encryption scheme: "'+u+'".');return u.decode(l,c,!1)},c.sign=function(f,u){var h=!1;typeof u=="string"&&(u=u.toUpperCase()),u===void 0||u==="RSASSA-PKCS1-V1_5"?(u={encode:fd},h=1):(u==="NONE"||u==="NULL"||u===null)&&(u={encode:function(){return f}},h=1);var l=u.encode(f,c.n.bitLength());return Q.rsa.encrypt(l,c,h)},c};Q.wrapRsaPrivateKey=function(e){return E.create(E.Class.UNIVERSAL,E.Type.SEQUENCE,!0,[E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,E.integerToDer(0).getBytes()),E.create(E.Class.UNIVERSAL,E.Type.SEQUENCE,!0,[E.create(E.Class.UNIVERSAL,E.Type.OID,!1,E.oidToDer(Q.oids.rsaEncryption).getBytes()),E.create(E.Class.UNIVERSAL,E.Type.NULL,!1,"")]),E.create(E.Class.UNIVERSAL,E.Type.OCTETSTRING,!1,E.toDer(e).getBytes())])};Q.privateKeyFromAsn1=function(e){var t={},r=[];if(E.validate(e,id,t,r)&&(e=E.fromDer(Y.util.createBuffer(t.privateKey))),t={},r=[],!E.validate(e,sd,t,r)){var n=new Error("Cannot read private key. ASN.1 object does not contain an RSAPrivateKey.");throw n.errors=r,n}var i,s,o,a,c,f,u,h;return i=Y.util.createBuffer(t.privateKeyModulus).toHex(),s=Y.util.createBuffer(t.privateKeyPublicExponent).toHex(),o=Y.util.createBuffer(t.privateKeyPrivateExponent).toHex(),a=Y.util.createBuffer(t.privateKeyPrime1).toHex(),c=Y.util.createBuffer(t.privateKeyPrime2).toHex(),f=Y.util.createBuffer(t.privateKeyExponent1).toHex(),u=Y.util.createBuffer(t.privateKeyExponent2).toHex(),h=Y.util.createBuffer(t.privateKeyCoefficient).toHex(),Q.setRsaPrivateKey(new st(i,16),new st(s,16),new st(o,16),new st(a,16),new st(c,16),new st(f,16),new st(u,16),new st(h,16))};Q.privateKeyToAsn1=Q.privateKeyToRSAPrivateKey=function(e){return E.create(E.Class.UNIVERSAL,E.Type.SEQUENCE,!0,[E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,E.integerToDer(0).getBytes()),E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,ge(e.n)),E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,ge(e.e)),E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,ge(e.d)),E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,ge(e.p)),E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,ge(e.q)),E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,ge(e.dP)),E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,ge(e.dQ)),E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,ge(e.qInv))])};Q.publicKeyFromAsn1=function(e){var t={},r=[];if(E.validate(e,ad,t,r)){var n=E.derToOid(t.publicKeyOid);if(n!==Q.oids.rsaEncryption){var i=new Error("Cannot read public key. Unknown OID.");throw i.oid=n,i}e=t.rsaPublicKey}if(r=[],!E.validate(e,od,t,r)){var i=new Error("Cannot read public key. ASN.1 object does not contain an RSAPublicKey.");throw i.errors=r,i}var s=Y.util.createBuffer(t.publicKeyModulus).toHex(),o=Y.util.createBuffer(t.publicKeyExponent).toHex();return Q.setRsaPublicKey(new st(s,16),new st(o,16))};Q.publicKeyToAsn1=Q.publicKeyToSubjectPublicKeyInfo=function(e){return E.create(E.Class.UNIVERSAL,E.Type.SEQUENCE,!0,[E.create(E.Class.UNIVERSAL,E.Type.SEQUENCE,!0,[E.create(E.Class.UNIVERSAL,E.Type.OID,!1,E.oidToDer(Q.oids.rsaEncryption).getBytes()),E.create(E.Class.UNIVERSAL,E.Type.NULL,!1,"")]),E.create(E.Class.UNIVERSAL,E.Type.BITSTRING,!1,[Q.publicKeyToRSAPublicKey(e)])])};Q.publicKeyToRSAPublicKey=function(e){return E.create(E.Class.UNIVERSAL,E.Type.SEQUENCE,!0,[E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,ge(e.n)),E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,ge(e.e))])};function mc(e,t,r){var n=Y.util.createBuffer(),i=Math.ceil(t.n.bitLength()/8);if(e.length>i-11){var s=new Error("Message is too long for PKCS#1 v1.5 padding.");throw s.length=e.length,s.max=i-11,s}n.putByte(0),n.putByte(r);var o=i-3-e.length,a;if(r===0||r===1){a=r===0?0:255;for(var c=0;c0;){for(var f=0,u=Y.random.getBytes(o),c=0;c"u")throw new Error("Encryption block is invalid.");var c=0;if(a===0){c=i-3-n;for(var f=0;f1;){if(s.getByte()!==255){--s.read;break}++c}else if(a===2)for(c=0;s.length()>1;){if(s.getByte()===0){--s.read;break}++c}var u=s.getByte();if(u!==0||c!==i-3-s.length())throw new Error("Encryption block is invalid.");return s.getBytes()}function ud(e,t,r){typeof t=="function"&&(r=t,t={}),t=t||{};var n={algorithm:{name:t.algorithm||"PRIMEINC",options:{workers:t.workers||2,workLoad:t.workLoad||100,workerScript:t.workerScript}}};"prng"in t&&(n.prng=t.prng),i();function i(){s(e.pBits,function(a,c){if(a)return r(a);if(e.p=c,e.q!==null)return o(a,e.q);s(e.qBits,o)})}function s(a,c){Y.prime.generateProbablePrime(a,n,c)}function o(a,c){if(a)return r(a);if(e.q=c,e.p.compareTo(e.q)<0){var f=e.p;e.p=e.q,e.q=f}if(e.p.subtract(st.ONE).gcd(e.e).compareTo(st.ONE)!==0){e.p=null,i();return}if(e.q.subtract(st.ONE).gcd(e.e).compareTo(st.ONE)!==0){e.q=null,s(e.qBits,o);return}if(e.p1=e.p.subtract(st.ONE),e.q1=e.q.subtract(st.ONE),e.phi=e.p1.multiply(e.q1),e.phi.gcd(e.e).compareTo(st.ONE)!==0){e.p=e.q=null,i();return}if(e.n=e.p.multiply(e.q),e.n.bitLength()!==e.bits){e.q=null,s(e.qBits,o);return}var u=e.e.modInverse(e.phi);e.keys={privateKey:Q.rsa.setPrivateKey(e.n,e.e,u,e.p,e.q,u.mod(e.p1),u.mod(e.q1),e.q.modInverse(e.p)),publicKey:Q.rsa.setPublicKey(e.n,e.e)},r(null,e.keys)}}function ge(e){var t=e.toString(16);t[0]>="8"&&(t="00"+t);var r=Y.util.hexToBytes(t);return r.length>1&&(r.charCodeAt(0)===0&&!(r.charCodeAt(1)&128)||r.charCodeAt(0)===255&&(r.charCodeAt(1)&128)===128)?r.substr(1):r}function hd(e){return e<=100?27:e<=150?18:e<=200?15:e<=250?12:e<=300?9:e<=350?8:e<=400?7:e<=500?6:e<=600?5:e<=800?4:e<=1250?3:2}function pc(e){return Y.util.isNodejs&&typeof $s[e]=="function"}function dc(e){return typeof te.globalScope<"u"&&typeof te.globalScope.crypto=="object"&&typeof te.globalScope.crypto.subtle=="object"&&typeof te.globalScope.crypto.subtle[e]=="function"}function yc(e){return typeof te.globalScope<"u"&&typeof te.globalScope.msCrypto=="object"&&typeof te.globalScope.msCrypto.subtle=="object"&&typeof te.globalScope.msCrypto.subtle[e]=="function"}function xc(e){for(var t=Y.util.hexToBytes(e.toString(16)),r=new Uint8Array(t.length),n=0;n{var H=ht();Ms();ln();_0();ir();ci();P0();K0();pn();Z0();Bi();Ct();typeof vc>"u"&&(vc=H.jsbn.BigInteger);var vc,I=H.asn1,tt=H.pki=H.pki||{};Bc.exports=tt.pbe=H.pbe=H.pbe||{};var ar=tt.oids,ld={name:"EncryptedPrivateKeyInfo",tagClass:I.Class.UNIVERSAL,type:I.Type.SEQUENCE,constructed:!0,value:[{name:"EncryptedPrivateKeyInfo.encryptionAlgorithm",tagClass:I.Class.UNIVERSAL,type:I.Type.SEQUENCE,constructed:!0,value:[{name:"AlgorithmIdentifier.algorithm",tagClass:I.Class.UNIVERSAL,type:I.Type.OID,constructed:!1,capture:"encryptionOid"},{name:"AlgorithmIdentifier.parameters",tagClass:I.Class.UNIVERSAL,type:I.Type.SEQUENCE,constructed:!0,captureAsn1:"encryptionParams"}]},{name:"EncryptedPrivateKeyInfo.encryptedData",tagClass:I.Class.UNIVERSAL,type:I.Type.OCTETSTRING,constructed:!1,capture:"encryptedData"}]},pd={name:"PBES2Algorithms",tagClass:I.Class.UNIVERSAL,type:I.Type.SEQUENCE,constructed:!0,value:[{name:"PBES2Algorithms.keyDerivationFunc",tagClass:I.Class.UNIVERSAL,type:I.Type.SEQUENCE,constructed:!0,value:[{name:"PBES2Algorithms.keyDerivationFunc.oid",tagClass:I.Class.UNIVERSAL,type:I.Type.OID,constructed:!1,capture:"kdfOid"},{name:"PBES2Algorithms.params",tagClass:I.Class.UNIVERSAL,type:I.Type.SEQUENCE,constructed:!0,value:[{name:"PBES2Algorithms.params.salt",tagClass:I.Class.UNIVERSAL,type:I.Type.OCTETSTRING,constructed:!1,capture:"kdfSalt"},{name:"PBES2Algorithms.params.iterationCount",tagClass:I.Class.UNIVERSAL,type:I.Type.INTEGER,constructed:!1,capture:"kdfIterationCount"},{name:"PBES2Algorithms.params.keyLength",tagClass:I.Class.UNIVERSAL,type:I.Type.INTEGER,constructed:!1,optional:!0,capture:"keyLength"},{name:"PBES2Algorithms.params.prf",tagClass:I.Class.UNIVERSAL,type:I.Type.SEQUENCE,constructed:!0,optional:!0,value:[{name:"PBES2Algorithms.params.prf.algorithm",tagClass:I.Class.UNIVERSAL,type:I.Type.OID,constructed:!1,capture:"prfOid"}]}]}]},{name:"PBES2Algorithms.encryptionScheme",tagClass:I.Class.UNIVERSAL,type:I.Type.SEQUENCE,constructed:!0,value:[{name:"PBES2Algorithms.encryptionScheme.oid",tagClass:I.Class.UNIVERSAL,type:I.Type.OID,constructed:!1,capture:"encOid"},{name:"PBES2Algorithms.encryptionScheme.iv",tagClass:I.Class.UNIVERSAL,type:I.Type.OCTETSTRING,constructed:!1,capture:"encIv"}]}]},dd={name:"pkcs-12PbeParams",tagClass:I.Class.UNIVERSAL,type:I.Type.SEQUENCE,constructed:!0,value:[{name:"pkcs-12PbeParams.salt",tagClass:I.Class.UNIVERSAL,type:I.Type.OCTETSTRING,constructed:!1,capture:"salt"},{name:"pkcs-12PbeParams.iterations",tagClass:I.Class.UNIVERSAL,type:I.Type.INTEGER,constructed:!1,capture:"iterations"}]};tt.encryptPrivateKeyInfo=function(e,t,r){r=r||{},r.saltSize=r.saltSize||8,r.count=r.count||2048,r.algorithm=r.algorithm||"aes128",r.prfAlgorithm=r.prfAlgorithm||"sha1";var n=H.random.getBytesSync(r.saltSize),i=r.count,s=I.integerToDer(i),o,a,c;if(r.algorithm.indexOf("aes")===0||r.algorithm==="des"){var f,u,h;switch(r.algorithm){case"aes128":o=16,f=16,u=ar["aes128-CBC"],h=H.aes.createEncryptionCipher;break;case"aes192":o=24,f=16,u=ar["aes192-CBC"],h=H.aes.createEncryptionCipher;break;case"aes256":o=32,f=16,u=ar["aes256-CBC"],h=H.aes.createEncryptionCipher;break;case"des":o=8,f=8,u=ar.desCBC,h=H.des.createEncryptionCipher;break;default:var l=new Error("Cannot encrypt private key. Unknown encryption algorithm.");throw l.algorithm=r.algorithm,l}var x="hmacWith"+r.prfAlgorithm.toUpperCase(),p=Sc(x),d=H.pkcs5.pbkdf2(t,n,i,o,p),y=H.random.getBytesSync(f),g=h(d);g.start(y),g.update(I.toDer(e)),g.finish(),c=g.output.getBytes();var v=yd(n,s,o,x);a=I.create(I.Class.UNIVERSAL,I.Type.SEQUENCE,!0,[I.create(I.Class.UNIVERSAL,I.Type.OID,!1,I.oidToDer(ar.pkcs5PBES2).getBytes()),I.create(I.Class.UNIVERSAL,I.Type.SEQUENCE,!0,[I.create(I.Class.UNIVERSAL,I.Type.SEQUENCE,!0,[I.create(I.Class.UNIVERSAL,I.Type.OID,!1,I.oidToDer(ar.pkcs5PBKDF2).getBytes()),v]),I.create(I.Class.UNIVERSAL,I.Type.SEQUENCE,!0,[I.create(I.Class.UNIVERSAL,I.Type.OID,!1,I.oidToDer(u).getBytes()),I.create(I.Class.UNIVERSAL,I.Type.OCTETSTRING,!1,y)])])])}else if(r.algorithm==="3des"){o=24;var m=new H.util.ByteBuffer(n),d=tt.pbe.generatePkcs12Key(t,m,1,i,o),y=tt.pbe.generatePkcs12Key(t,m,2,i,o),g=H.des.createEncryptionCipher(d);g.start(y),g.update(I.toDer(e)),g.finish(),c=g.output.getBytes(),a=I.create(I.Class.UNIVERSAL,I.Type.SEQUENCE,!0,[I.create(I.Class.UNIVERSAL,I.Type.OID,!1,I.oidToDer(ar["pbeWithSHAAnd3-KeyTripleDES-CBC"]).getBytes()),I.create(I.Class.UNIVERSAL,I.Type.SEQUENCE,!0,[I.create(I.Class.UNIVERSAL,I.Type.OCTETSTRING,!1,n),I.create(I.Class.UNIVERSAL,I.Type.INTEGER,!1,s.getBytes())])])}else{var l=new Error("Cannot encrypt private key. Unknown encryption algorithm.");throw l.algorithm=r.algorithm,l}var C=I.create(I.Class.UNIVERSAL,I.Type.SEQUENCE,!0,[a,I.create(I.Class.UNIVERSAL,I.Type.OCTETSTRING,!1,c)]);return C};tt.decryptPrivateKeyInfo=function(e,t){var r=null,n={},i=[];if(!I.validate(e,ld,n,i)){var s=new Error("Cannot read encrypted private key. ASN.1 object is not a supported EncryptedPrivateKeyInfo.");throw s.errors=i,s}var o=I.derToOid(n.encryptionOid),a=tt.pbe.getCipher(o,n.encryptionParams,t),c=H.util.createBuffer(n.encryptedData);return a.update(c),a.finish()&&(r=I.fromDer(a.output)),r};tt.encryptedPrivateKeyToPem=function(e,t){var r={type:"ENCRYPTED PRIVATE KEY",body:I.toDer(e).getBytes()};return H.pem.encode(r,{maxline:t})};tt.encryptedPrivateKeyFromPem=function(e){var t=H.pem.decode(e)[0];if(t.type!=="ENCRYPTED PRIVATE KEY"){var r=new Error('Could not convert encrypted private key from PEM; PEM header type is "ENCRYPTED PRIVATE KEY".');throw r.headerType=t.type,r}if(t.procType&&t.procType.type==="ENCRYPTED")throw new Error("Could not convert encrypted private key from PEM; PEM is encrypted.");return I.fromDer(t.body)};tt.encryptRsaPrivateKey=function(e,t,r){if(r=r||{},!r.legacy){var n=tt.wrapRsaPrivateKey(tt.privateKeyToAsn1(e));return n=tt.encryptPrivateKeyInfo(n,t,r),tt.encryptedPrivateKeyToPem(n)}var i,s,o,a;switch(r.algorithm){case"aes128":i="AES-128-CBC",o=16,s=H.random.getBytesSync(16),a=H.aes.createEncryptionCipher;break;case"aes192":i="AES-192-CBC",o=24,s=H.random.getBytesSync(16),a=H.aes.createEncryptionCipher;break;case"aes256":i="AES-256-CBC",o=32,s=H.random.getBytesSync(16),a=H.aes.createEncryptionCipher;break;case"3des":i="DES-EDE3-CBC",o=24,s=H.random.getBytesSync(8),a=H.des.createEncryptionCipher;break;case"des":i="DES-CBC",o=8,s=H.random.getBytesSync(8),a=H.des.createEncryptionCipher;break;default:var c=new Error('Could not encrypt RSA private key; unsupported encryption algorithm "'+r.algorithm+'".');throw c.algorithm=r.algorithm,c}var f=H.pbe.opensslDeriveBytes(t,s.substr(0,8),o),u=a(f);u.start(s),u.update(I.toDer(tt.privateKeyToAsn1(e))),u.finish();var h={type:"RSA PRIVATE KEY",procType:{version:"4",type:"ENCRYPTED"},dekInfo:{algorithm:i,parameters:H.util.bytesToHex(s).toUpperCase()},body:u.output.getBytes()};return H.pem.encode(h)};tt.decryptRsaPrivateKey=function(e,t){var r=null,n=H.pem.decode(e)[0];if(n.type!=="ENCRYPTED PRIVATE KEY"&&n.type!=="PRIVATE KEY"&&n.type!=="RSA PRIVATE KEY"){var i=new Error('Could not convert private key from PEM; PEM header type is not "ENCRYPTED PRIVATE KEY", "PRIVATE KEY", or "RSA PRIVATE KEY".');throw i.headerType=i,i}if(n.procType&&n.procType.type==="ENCRYPTED"){var s,o;switch(n.dekInfo.algorithm){case"DES-CBC":s=8,o=H.des.createDecryptionCipher;break;case"DES-EDE3-CBC":s=24,o=H.des.createDecryptionCipher;break;case"AES-128-CBC":s=16,o=H.aes.createDecryptionCipher;break;case"AES-192-CBC":s=24,o=H.aes.createDecryptionCipher;break;case"AES-256-CBC":s=32,o=H.aes.createDecryptionCipher;break;case"RC2-40-CBC":s=5,o=function(h){return H.rc2.createDecryptionCipher(h,40)};break;case"RC2-64-CBC":s=8,o=function(h){return H.rc2.createDecryptionCipher(h,64)};break;case"RC2-128-CBC":s=16,o=function(h){return H.rc2.createDecryptionCipher(h,128)};break;default:var i=new Error('Could not decrypt private key; unsupported encryption algorithm "'+n.dekInfo.algorithm+'".');throw i.algorithm=n.dekInfo.algorithm,i}var a=H.util.hexToBytes(n.dekInfo.parameters),c=H.pbe.opensslDeriveBytes(t,a.substr(0,8),s),f=o(c);if(f.start(a),f.update(H.util.createBuffer(n.body)),f.finish())r=f.output.getBytes();else return r}else r=n.body;return n.type==="ENCRYPTED PRIVATE KEY"?r=tt.decryptPrivateKeyInfo(I.fromDer(r),t):r=I.fromDer(r),r!==null&&(r=tt.privateKeyFromAsn1(r)),r};tt.pbe.generatePkcs12Key=function(e,t,r,n,i,s){var o,a;if(typeof s>"u"||s===null){if(!("sha1"in H.md))throw new Error('"sha1" hash algorithm unavailable.');s=H.md.sha1.create()}var c=s.digestLength,f=s.blockLength,u=new H.util.ByteBuffer,h=new H.util.ByteBuffer;if(e!=null){for(a=0;a=0;a--)q=q>>8,q+=L.at(a)+U.at(a),U.setAt(a,q&255);M.putBuffer(U)}m=M,u.putBuffer(B)}return u.truncate(u.length()-i),u};tt.pbe.getCipher=function(e,t,r){switch(e){case tt.oids.pkcs5PBES2:return tt.pbe.getCipherForPBES2(e,t,r);case tt.oids["pbeWithSHAAnd3-KeyTripleDES-CBC"]:case tt.oids["pbewithSHAAnd40BitRC2-CBC"]:return tt.pbe.getCipherForPKCS12PBE(e,t,r);default:var n=new Error("Cannot read encrypted PBE data block. Unsupported OID.");throw n.oid=e,n.supportedOids=["pkcs5PBES2","pbeWithSHAAnd3-KeyTripleDES-CBC","pbewithSHAAnd40BitRC2-CBC"],n}};tt.pbe.getCipherForPBES2=function(e,t,r){var n={},i=[];if(!I.validate(t,pd,n,i)){var s=new Error("Cannot read password-based-encryption algorithm parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.");throw s.errors=i,s}if(e=I.derToOid(n.kdfOid),e!==tt.oids.pkcs5PBKDF2){var s=new Error("Cannot read encrypted private key. Unsupported key derivation function OID.");throw s.oid=e,s.supportedOids=["pkcs5PBKDF2"],s}if(e=I.derToOid(n.encOid),e!==tt.oids["aes128-CBC"]&&e!==tt.oids["aes192-CBC"]&&e!==tt.oids["aes256-CBC"]&&e!==tt.oids["des-EDE3-CBC"]&&e!==tt.oids.desCBC){var s=new Error("Cannot read encrypted private key. Unsupported encryption scheme OID.");throw s.oid=e,s.supportedOids=["aes128-CBC","aes192-CBC","aes256-CBC","des-EDE3-CBC","desCBC"],s}var o=n.kdfSalt,a=H.util.createBuffer(n.kdfIterationCount);a=a.getInt(a.length()<<3);var c,f;switch(tt.oids[e]){case"aes128-CBC":c=16,f=H.aes.createDecryptionCipher;break;case"aes192-CBC":c=24,f=H.aes.createDecryptionCipher;break;case"aes256-CBC":c=32,f=H.aes.createDecryptionCipher;break;case"des-EDE3-CBC":c=24,f=H.des.createDecryptionCipher;break;case"desCBC":c=8,f=H.des.createDecryptionCipher;break}var u=Ec(n.prfOid),h=H.pkcs5.pbkdf2(r,o,a,c,u),l=n.encIv,x=f(h);return x.start(l),x};tt.pbe.getCipherForPKCS12PBE=function(e,t,r){var n={},i=[];if(!I.validate(t,dd,n,i)){var s=new Error("Cannot read password-based-encryption algorithm parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.");throw s.errors=i,s}var o=H.util.createBuffer(n.salt),a=H.util.createBuffer(n.iterations);a=a.getInt(a.length()<<3);var c,f,u;switch(e){case tt.oids["pbeWithSHAAnd3-KeyTripleDES-CBC"]:c=24,f=8,u=H.des.startDecrypting;break;case tt.oids["pbewithSHAAnd40BitRC2-CBC"]:c=5,f=8,u=function(d,y){var g=H.rc2.createDecryptionCipher(d,40);return g.start(y,null),g};break;default:var s=new Error("Cannot read PKCS #12 PBE data block. Unsupported OID.");throw s.oid=e,s}var h=Ec(n.prfOid),l=tt.pbe.generatePkcs12Key(r,o,1,a,c,h);h.start();var x=tt.pbe.generatePkcs12Key(r,o,2,a,f,h);return u(l,x)};tt.pbe.opensslDeriveBytes=function(e,t,r,n){if(typeof n>"u"||n===null){if(!("md5"in H.md))throw new Error('"md5" hash algorithm unavailable.');n=H.md.md5.create()}t===null&&(t="");for(var i=[wc(n,e+t)],s=16,o=1;s{var mt=ht();ir();Ct();var Sn=xf.exports=mt.sha512=mt.sha512||{};mt.md.sha512=mt.md.algorithms.sha512=Sn;var df=mt.sha384=mt.sha512.sha384=mt.sha512.sha384||{};df.create=function(){return Sn.create("SHA-384")};mt.md.sha384=mt.md.algorithms.sha384=df;mt.sha512.sha256=mt.sha512.sha256||{create:function(){return Sn.create("SHA-512/256")}};mt.md["sha512/256"]=mt.md.algorithms["sha512/256"]=mt.sha512.sha256;mt.sha512.sha224=mt.sha512.sha224||{create:function(){return Sn.create("SHA-512/224")}};mt.md["sha512/224"]=mt.md.algorithms["sha512/224"]=mt.sha512.sha224;Sn.create=function(e){if(yf||Uy(),typeof e>"u"&&(e="SHA-512"),!(e in yr))throw new Error("Invalid SHA-512 algorithm: "+e);for(var t=yr[e],r=null,n=mt.util.createBuffer(),i=new Array(80),s=0;s<80;++s)i[s]=new Array(2);var o=64;switch(e){case"SHA-384":o=48;break;case"SHA-512/256":o=32;break;case"SHA-512/224":o=28;break}var a={algorithm:e.replace("-","").toLowerCase(),blockLength:128,digestLength:o,messageLength:0,fullMessageLength:null,messageLengthSize:16};return a.start=function(){a.messageLength=0,a.fullMessageLength=a.messageLength128=[];for(var c=a.messageLengthSize/4,f=0;f>>0,u>>>0];for(var h=a.fullMessageLength.length-1;h>=0;--h)a.fullMessageLength[h]+=u[1],u[1]=u[0]+(a.fullMessageLength[h]/4294967296>>>0),a.fullMessageLength[h]=a.fullMessageLength[h]>>>0,u[0]=u[1]/4294967296>>>0;return n.putBytes(c),pf(r,i,n),(n.read>2048||n.length()===0)&&n.compact(),a},a.digest=function(){var c=mt.util.createBuffer();c.putBytes(n.bytes());var f=a.fullMessageLength[a.fullMessageLength.length-1]+a.messageLengthSize,u=f&a.blockLength-1;c.putBytes(Po.substr(0,a.blockLength-u));for(var h,l,x=a.fullMessageLength[0]*8,p=0;p>>0,x+=l,c.putInt32(x>>>0),x=h>>>0;c.putInt32(x);for(var d=new Array(r.length),p=0;p=128;){for(A=0;A<16;++A)t[A][0]=r.getInt32()>>>0,t[A][1]=r.getInt32()>>>0;for(;A<80;++A)_=t[A-2],N=_[0],T=_[1],n=((N>>>19|T<<13)^(T>>>29|N<<3)^N>>>6)>>>0,i=((N<<13|T>>>19)^(T<<3|N>>>29)^(N<<26|T>>>6))>>>0,k=t[A-15],N=k[0],T=k[1],s=((N>>>1|T<<31)^(N>>>8|T<<24)^N>>>7)>>>0,o=((N<<31|T>>>1)^(N<<24|T>>>8)^(N<<25|T>>>7))>>>0,w=t[A-7],K=t[A-16],T=i+w[1]+o+K[1],t[A][0]=n+w[0]+s+K[0]+(T/4294967296>>>0)>>>0,t[A][1]=T>>>0;for(d=e[0][0],y=e[0][1],g=e[1][0],v=e[1][1],m=e[2][0],C=e[2][1],S=e[3][0],B=e[3][1],R=e[4][0],L=e[4][1],O=e[5][0],M=e[5][1],U=e[6][0],q=e[6][1],z=e[7][0],Z=e[7][1],A=0;A<80;++A)f=((R>>>14|L<<18)^(R>>>18|L<<14)^(L>>>9|R<<23))>>>0,u=((R<<18|L>>>14)^(R<<14|L>>>18)^(L<<23|R>>>9))>>>0,h=(U^R&(O^U))>>>0,l=(q^L&(M^q))>>>0,a=((d>>>28|y<<4)^(y>>>2|d<<30)^(y>>>7|d<<25))>>>0,c=((d<<4|y>>>28)^(y<<30|d>>>2)^(y<<25|d>>>7))>>>0,x=(d&g|m&(d^g))>>>0,p=(y&v|C&(y^v))>>>0,T=Z+u+l+ko[A][1]+t[A][1],n=z+f+h+ko[A][0]+t[A][0]+(T/4294967296>>>0)>>>0,i=T>>>0,T=c+p,s=a+x+(T/4294967296>>>0)>>>0,o=T>>>0,z=U,Z=q,U=O,q=M,O=R,M=L,T=B+i,R=S+n+(T/4294967296>>>0)>>>0,L=T>>>0,S=m,B=C,m=g,C=v,g=d,v=y,T=i+o,d=n+s+(T/4294967296>>>0)>>>0,y=T>>>0;T=e[0][1]+y,e[0][0]=e[0][0]+d+(T/4294967296>>>0)>>>0,e[0][1]=T>>>0,T=e[1][1]+v,e[1][0]=e[1][0]+g+(T/4294967296>>>0)>>>0,e[1][1]=T>>>0,T=e[2][1]+C,e[2][0]=e[2][0]+m+(T/4294967296>>>0)>>>0,e[2][1]=T>>>0,T=e[3][1]+B,e[3][0]=e[3][0]+S+(T/4294967296>>>0)>>>0,e[3][1]=T>>>0,T=e[4][1]+L,e[4][0]=e[4][0]+R+(T/4294967296>>>0)>>>0,e[4][1]=T>>>0,T=e[5][1]+M,e[5][0]=e[5][0]+O+(T/4294967296>>>0)>>>0,e[5][1]=T>>>0,T=e[6][1]+q,e[6][0]=e[6][0]+U+(T/4294967296>>>0)>>>0,e[6][1]=T>>>0,T=e[7][1]+Z,e[7][0]=e[7][0]+z+(T/4294967296>>>0)>>>0,e[7][1]=T>>>0,F-=128}}});var x1={};Lt(x1,{noise:()=>y1,pureJsCrypto:()=>oi});function Ee(e){return globalThis.Buffer!=null?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):e}function rt(e=0){return globalThis.Buffer?.alloc!=null?Ee(globalThis.Buffer.alloc(e)):new Uint8Array(e)}function Bt(e=0){return globalThis.Buffer?.allocUnsafe!=null?Ee(globalThis.Buffer.allocUnsafe(e)):new Uint8Array(e)}var hu=Math.pow(2,7),lu=Math.pow(2,14),pu=Math.pow(2,21),Fi=Math.pow(2,28),Hi=Math.pow(2,35),qi=Math.pow(2,42),zi=Math.pow(2,49),ct=128,Vt=127;function Se(e){if(eNumber.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function du(e,t,r=0){switch(Se(e)){case 8:t[r++]=e&255|ct,e/=128;case 7:t[r++]=e&255|ct,e/=128;case 6:t[r++]=e&255|ct,e/=128;case 5:t[r++]=e&255|ct,e/=128;case 4:t[r++]=e&255|ct,e>>>=7;case 3:t[r++]=e&255|ct,e>>>=7;case 2:t[r++]=e&255|ct,e>>>=7;case 1:{t[r++]=e&255,e>>>=7;break}default:throw new Error("unreachable")}return t}function yu(e,t,r=0){switch(Se(e)){case 8:t.set(r++,e&255|ct),e/=128;case 7:t.set(r++,e&255|ct),e/=128;case 6:t.set(r++,e&255|ct),e/=128;case 5:t.set(r++,e&255|ct),e/=128;case 4:t.set(r++,e&255|ct),e>>>=7;case 3:t.set(r++,e&255|ct),e>>>=7;case 2:t.set(r++,e&255|ct),e>>>=7;case 1:{t.set(r++,e&255),e>>>=7;break}default:throw new Error("unreachable")}return t}function xu(e,t){let r=e[t],n=0;if(n+=r&Vt,ri+s.length,0));let r=Bt(t),n=0;for(let i of e)r.set(i,n),n+=i.length;return Ee(r)}function Rt(e,t){if(e===t)return!0;if(e.byteLength!==t.byteLength)return!1;for(let r=0;r0&&this.appendAll(t)}*[Symbol.iterator](){yield*this.bufs}get byteLength(){return this.length}append(...t){this.appendAll(t)}appendAll(t){let r=0;for(let n of t)if(n instanceof Uint8Array)r+=n.byteLength,this.bufs.push(n);else if(br(n))r+=n.byteLength,this.bufs.push(...n.bufs);else throw new Error("Could not append value, must be an Uint8Array or a Uint8ArrayList");this.length+=r}prepend(...t){this.prependAll(t)}prependAll(t){let r=0;for(let n of t.reverse())if(n instanceof Uint8Array)r+=n.byteLength,this.bufs.unshift(n);else if(br(n))r+=n.byteLength,this.bufs.unshift(...n.bufs);else throw new Error("Could not prepend value, must be an Uint8Array or a Uint8ArrayList");this.length+=r}get(t){let r=aa(this.bufs,t);return r.buf[r.index]}set(t,r){let n=aa(this.bufs,t);n.buf[n.index]=r}write(t,r=0){if(t instanceof Uint8Array)for(let n=0;n0;)if(t>=this.bufs[0].byteLength)t-=this.bufs[0].byteLength,this.length-=this.bufs[0].byteLength,this.bufs.shift();else{this.bufs[0]=this.bufs[0].subarray(t),this.length-=t;break}}}slice(t,r){let{bufs:n,length:i}=this._subList(t,r);return Zt(n,i)}subarray(t,r){let{bufs:n,length:i}=this._subList(t,r);return n.length===1?n[0]:Zt(n,i)}sublist(t,r){let{bufs:n,length:i}=this._subList(t,r),s=new e;return s.length=i,s.bufs=[...n],s}_subList(t,r){if(t=t??0,r=r??this.length,t<0&&(t=this.length+t),r<0&&(r=this.length+r),t<0||r>this.length)throw new RangeError("index is out of bounds");if(t===r)return{bufs:[],length:0};if(t===0&&r===this.length)return{bufs:this.bufs,length:this.length};let n=[],i=0;for(let s=0;s=c)continue;let f=t>=a&&ta&&r<=c;if(f&&u){if(t===a&&r===c){n.push(o);break}let h=t-a;n.push(o.subarray(h,h+(r-t)));break}if(f){if(t===0){n.push(o);continue}n.push(o.subarray(t-a));continue}if(u){if(r===c){n.push(o);break}n.push(o.subarray(0,r-a));break}n.push(o)}return{bufs:n,length:r-t}}indexOf(t,r=0){if(!br(t)&&!(t instanceof Uint8Array))throw new TypeError('The "value" argument must be a Uint8ArrayList or Uint8Array');let n=t instanceof Uint8Array?t:t.subarray();if(r=Number(r??0),isNaN(r)&&(r=0),r<0&&(r=this.length+r),r<0&&(r=0),t.length===0)return r>this.length?this.length:r;let i=n.byteLength;if(i===0)throw new TypeError("search must be at least 1 byte long");let s=256,o=new Int32Array(s);for(let h=0;h=0;l--){let x=this.get(h+l);if(n[l]!==x){u=Math.max(1,l-a[x]);break}}if(u===0)return h}return-1}getInt8(t){let r=this.subarray(t,t+1);return new DataView(r.buffer,r.byteOffset,r.byteLength).getInt8(0)}setInt8(t,r){let n=Bt(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setInt8(0,r),this.write(n,t)}getInt16(t,r){let n=this.subarray(t,t+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt16(0,r)}setInt16(t,r,n){let i=rt(2);new DataView(i.buffer,i.byteOffset,i.byteLength).setInt16(0,r,n),this.write(i,t)}getInt32(t,r){let n=this.subarray(t,t+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt32(0,r)}setInt32(t,r,n){let i=rt(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setInt32(0,r,n),this.write(i,t)}getBigInt64(t,r){let n=this.subarray(t,t+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigInt64(0,r)}setBigInt64(t,r,n){let i=rt(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setBigInt64(0,r,n),this.write(i,t)}getUint8(t){let r=this.subarray(t,t+1);return new DataView(r.buffer,r.byteOffset,r.byteLength).getUint8(0)}setUint8(t,r){let n=Bt(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setUint8(0,r),this.write(n,t)}getUint16(t,r){let n=this.subarray(t,t+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint16(0,r)}setUint16(t,r,n){let i=rt(2);new DataView(i.buffer,i.byteOffset,i.byteLength).setUint16(0,r,n),this.write(i,t)}getUint32(t,r){let n=this.subarray(t,t+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint32(0,r)}setUint32(t,r,n){let i=rt(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setUint32(0,r,n),this.write(i,t)}getBigUint64(t,r){let n=this.subarray(t,t+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigUint64(0,r)}setBigUint64(t,r,n){let i=rt(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setBigUint64(0,r,n),this.write(i,t)}getFloat32(t,r){let n=this.subarray(t,t+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat32(0,r)}setFloat32(t,r,n){let i=rt(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setFloat32(0,r,n),this.write(i,t)}getFloat64(t,r){let n=this.subarray(t,t+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat64(0,r)}setFloat64(t,r,n){let i=rt(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setFloat64(0,r,n),this.write(i,t)}equals(t){if(t==null||!(t instanceof e)||t.bufs.length!==this.bufs.length)return!1;for(let r=0;ri+s.byteLength,0)),n.length=r,n}};function Pn(e){return e[Symbol.asyncIterator]!=null}var kn=e=>{let t=Se(e),r=Bt(t);return oa(e,r),kn.bytes=t,r};kn.bytes=0;function Qr(e,t){t=t??{};let r=t.lengthEncoder??kn;function*n(i){let s=r(i.byteLength);s instanceof Uint8Array?yield s:yield*s,i instanceof Uint8Array?yield i:yield*i}return Pn(e)?async function*(){for await(let i of e)yield*n(i)}():function*(){for(let i of e)yield*n(i)}()}Qr.single=(e,t)=>{t=t??{};let r=t.lengthEncoder??kn;return new At(r(e.byteLength),e)};var vr=Gt(ha(),1);var bu=8,vu=1024*1024*4,Qe;(function(e){e[e.LENGTH=0]="LENGTH",e[e.DATA=1]="DATA"})(Qe||(Qe={}));var Yi=e=>{let t=Dn(e);return Yi.bytes=Se(t),t};Yi.bytes=0;function Jr(e,t){let r=new At,n=Qe.LENGTH,i=-1,s=t?.lengthDecoder??Yi,o=t?.maxLengthLength??bu,a=t?.maxDataLength??vu;function*c(){for(;r.byteLength>0;){if(n===Qe.LENGTH)try{if(i=s(r),i<0)throw(0,vr.default)(new Error("invalid message length"),"ERR_INVALID_MSG_LENGTH");if(i>a)throw(0,vr.default)(new Error("message length too long"),"ERR_MSG_DATA_TOO_LONG");let f=s.bytes;r.consume(f),t?.onLength!=null&&t.onLength(i),n=Qe.DATA}catch(f){if(f instanceof RangeError){if(r.byteLength>o)throw(0,vr.default)(new Error("message length length too long"),"ERR_MSG_LENGTH_TOO_LONG");break}throw f}if(n===Qe.DATA){if(r.byteLength0)throw(0,vr.default)(new Error("unexpected end of input"),"ERR_UNEXPECTED_EOF")}():function*(){for(let f of e)r.append(f),yield*c();if(r.byteLength>0)throw(0,vr.default)(new Error("unexpected end of input"),"ERR_UNEXPECTED_EOF")}()}Jr.fromReader=(e,t)=>{let r=1,n=async function*(){for(;;)try{let{done:s,value:o}=await e.next(r);if(s===!0)return;o!=null&&(yield o)}catch(s){if(s.code==="ERR_UNDER_READ")return{done:!0,value:null};throw s}finally{r=1}}();return Jr(n,{...t??{},onLength:s=>{r=s}})};function ne(){let e={};return e.promise=new Promise((t,r)=>{e.resolve=t,e.reject=r}),e}var Un=class extends Error{type;code;constructor(t,r){super(t??"The operation was aborted"),this.type="aborted",this.name="AbortError",this.code=r??"ABORT_ERR"}};async function la(e,t,r){if(t==null)return e;if(t.aborted)return Promise.reject(new Un(r?.errorMessage,r?.errorCode));let n,i=new Un(r?.errorMessage,r?.errorCode);try{return await Promise.race([e,new Promise((s,o)=>{n=()=>{o(i)},t.addEventListener("abort",n)})])}finally{n!=null&&t.removeEventListener("abort",n)}}var Wi=class{needNext;haveNext;ended;nextResult;constructor(){this.ended=!1,this.needNext=ne(),this.needNext.resolve(),this.haveNext=ne()}[Symbol.asyncIterator](){return this}async next(){if(this.nextResult==null&&await this.haveNext.promise,this.nextResult==null)throw new Error("Have next but next was undefined");let t=this.nextResult;return this.nextResult=void 0,this.needNext.resolve(),this.needNext=ne(),t}async throw(t){return this.ended=!0,t!=null&&this.haveNext.reject(t),{done:!0,value:void 0}}async return(){let t={done:!0,value:void 0};return await this._push(void 0),t}async push(t,r){await this._push(t,r)}async end(t,r){t!=null?await this.throw(t):await this._push(void 0,r)}async _push(t,r){if(t!=null&&this.ended)throw new Error("Cannot push value onto an ended pushable");this.nextResult!=null&&await this.needNext.promise,t!=null?this.nextResult={done:!1,value:t}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=ne(),await la(this.needNext.promise,r?.signal,r)}};function pa(){return new Wi}var Kn=class extends Error{code;constructor(t,r){super(t),this.code=r}},$i=class extends Kn{type;constructor(t){super(t,"ABORT_ERR"),this.type="aborted"}};function da(e,t){let r=pa();e.sink(r).catch(async o=>{await r.end(o)}),e.sink=async o=>{for await(let a of o)await r.push(a);await r.end()};let n=e.source;e.source[Symbol.iterator]!=null?n=e.source[Symbol.iterator]():e.source[Symbol.asyncIterator]!=null&&(n=e.source[Symbol.asyncIterator]());let i=new At;return{read:async(o,a)=>{a?.signal?.throwIfAborted();let c,f=new Promise((u,h)=>{c=()=>{h(new $i("Read aborted"))},a?.signal?.addEventListener("abort",c)});try{if(o==null){let{done:h,value:l}=await Promise.race([n.next(),f]);return h===!0?new At:l}for(;i.byteLength{a?.signal?.throwIfAborted(),o instanceof Uint8Array?await r.push(o,a):await r.push(o.subarray(),a)},unwrap:()=>{if(i.byteLength>0){let o=e.source;e.source=async function*(){t?.yieldBytes===!1?yield i:yield*i,yield*o}()}return e}}}var On=class extends Error{code;constructor(t,r){super(t),this.code=r}},ya=e=>Dn(e);ya.bytes=0;function Zi(e,t={}){let r=da(e,t);return t.maxDataLength!=null&&t.maxLengthLength==null&&(t.maxLengthLength=Se(t.maxDataLength)),{read:async i=>{let s=-1,o=new At,a=t?.lengthDecoder??ya;for(;;){o.append(await r.read(1,i));try{s=a(o)}catch(c){if(c instanceof RangeError)continue;throw c}if(t?.maxLengthLength!=null&&o.byteLength>t.maxLengthLength)throw new On("message length length too long","ERR_MSG_LENGTH_TOO_LONG");if(s>-1)break}if(t?.maxDataLength!=null&&s>t.maxDataLength)throw new On("message length too long","ERR_MSG_DATA_TOO_LONG");return r.read(s,i)},write:async(i,s)=>{await r.write(Qr.single(i,t),s)},writeV:async(i,s)=>{let o=new At(...i.map(a=>Qr.single(a,t)));await r.write(o,s)},unwrap:()=>r.unwrap()}}function Xi(){let e=ne(),t=!1;return{sink:async r=>{if(t)throw new Error("already piped");t=!0,e.resolve(r)},source:async function*(){yield*await e.promise}()}}function xa(){let e=Xi(),t=Xi();return[{source:e.source,sink:t.sink},{source:t.source,sink:e.sink}]}var Mn=class{buffer;mask;top;btm;next;constructor(t){if(!(t>0)||t-1&t)throw new Error("Max size for a FixedFIFO should be a power of two");this.buffer=new Array(t),this.mask=t-1,this.top=0,this.btm=0,this.next=null}push(t){return this.buffer[this.top]!==void 0?!1:(this.buffer[this.top]=t,this.top=this.top+1&this.mask,!0)}shift(){let t=this.buffer[this.btm];if(t!==void 0)return this.buffer[this.btm]=void 0,this.btm=this.btm+1&this.mask,t}isEmpty(){return this.buffer[this.btm]===void 0}},wr=class{size;hwm;head;tail;constructor(t={}){this.hwm=t.splitLimit??16,this.head=new Mn(this.hwm),this.tail=this.head,this.size=0}calculateSize(t){return t?.byteLength!=null?t.byteLength:1}push(t){if(t?.value!=null&&(this.size+=this.calculateSize(t.value)),!this.head.push(t)){let r=this.head;this.head=r.next=new Mn(2*this.head.buffer.length),this.head.push(t)}}shift(){let t=this.tail.shift();if(t===void 0&&this.tail.next!=null){let r=this.tail.next;this.tail.next=null,this.tail=r,t=this.tail.shift()}return t?.value!=null&&(this.size-=this.calculateSize(t.value)),t}isEmpty(){return this.head.isEmpty()}};var Qi=class extends Error{type;code;constructor(t,r){super(t??"The operation was aborted"),this.type="aborted",this.code=r??"ABORT_ERR"}};function Vn(e={}){return Eu(r=>{let n=r.shift();if(n==null)return{done:!0};if(n.error!=null)throw n.error;return{done:n.done===!0,value:n.value}},e)}function Eu(e,t){t=t??{};let r=t.onEnd,n=new wr,i,s,o,a=ne(),c=async()=>{try{return n.isEmpty()?o?{done:!0}:await new Promise((y,g)=>{s=v=>{s=null,n.push(v);try{y(e(n))}catch(m){g(m)}return i}}):e(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=ne()})}},f=y=>s!=null?s(y):(n.push(y),i),u=y=>(n=new wr,s!=null?s({error:y}):(n.push({error:y}),i)),h=y=>{if(o)return i;if(t?.objectMode!==!0&&y?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return f({done:!1,value:y})},l=y=>o?i:(o=!0,y!=null?u(y):f({done:!0})),x=()=>(n=new wr,l(),{done:!0}),p=y=>(l(y),{done:!0});if(i={[Symbol.asyncIterator](){return this},next:c,return:x,throw:p,push:h,end:l,get readableLength(){return n.size},onEmpty:async y=>{let g=y?.signal;if(g?.throwIfAborted(),n.isEmpty())return;let v,m;g!=null&&(v=new Promise((C,S)=>{m=()=>{S(new Qi)},g.addEventListener("abort",m)}));try{await Promise.race([a.promise,v])}finally{m!=null&&g!=null&&g?.removeEventListener("abort",m)}}},r==null)return i;let d=i;return i={[Symbol.asyncIterator](){return this},next(){return d.next()},throw(y){return d.throw(y),r!=null&&(r(y),r=void 0),{done:!0}},return(){return d.return(),r!=null&&(r(),r=void 0),{done:!0}},push:h,end(y){return d.end(y),r!=null&&(r(y),r=void 0),i},get readableLength(){return d.readableLength},onEmpty:y=>d.onEmpty(y)},i}function Su(e){return e[Symbol.asyncIterator]!=null}function Bu(...e){let t=[];for(let r of e)Su(r)||t.push(r);return t.length===e.length?function*(){for(let r of t)yield*r}():async function*(){let r=Vn({objectMode:!0});Promise.resolve().then(async()=>{try{await Promise.all(e.map(async n=>{for await(let i of n)r.push(i)})),r.end()}catch(n){r.end(n)}}),yield*r}()}var ga=Bu;function ma(e,...t){if(e==null)throw new Error("Empty pipeline");if(Ji(e)){let n=e;e=()=>n.source}else if(va(e)||ba(e)){let n=e;e=()=>n}let r=[e,...t];if(r.length>1&&Ji(r[r.length-1])&&(r[r.length-1]=r[r.length-1].sink),r.length>2)for(let n=1;n{let t;for(;e.length>0;)t=e.shift()(t);return t},ba=e=>e?.[Symbol.asyncIterator]!=null,va=e=>e?.[Symbol.iterator]!=null,Ji=e=>e==null?!1:e.sink!=null&&e.source!=null,Cu=e=>t=>{let r=e.sink(t);if(r?.then!=null){let n=Vn({objectMode:!0});r.then(()=>{n.end()},o=>{n.end(o)});let i,s=e.source;if(ba(s))i=async function*(){yield*s,n.end()};else if(va(s))i=function*(){yield*s,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return ga(n,i())}return e.source};var Er=!!globalThis.process?.env?.DUMP_SESSION_KEYS;var Iu=e=>e instanceof Uint8Array;var Be=e=>new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4)),wa=e=>new DataView(e.buffer,e.byteOffset,e.byteLength),Tu=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!Tu)throw new Error("Non little-endian hardware is not supported");function Fn(e){if(typeof e!="string")throw new Error(`utf8ToBytes expected string, got ${typeof e}`);return new Uint8Array(new TextEncoder().encode(e))}function Hn(e){if(typeof e=="string")e=Fn(e);else if(Iu(e))e=e.slice();else throw new Error(`expected Uint8Array, got ${typeof e}`);return e}var _u=e=>Object.prototype.toString.call(e)==="[object Object]"&&e.constructor===Object;function Ea(e,t){if(t!==void 0&&(typeof t!="object"||!_u(t)))throw new Error("options must be object or undefined");return Object.assign(e,t)}function Je(e,t){if(!(e instanceof Uint8Array))throw new Error("Uint8Array expected");if(typeof t=="number"&&e.length!==t)throw new Error(`Uint8Array length ${t} expected`)}function Sa(e,t){if(e.length!==t.length)throw new Error("equalBytes: Different size of Uint8Arrays");let r=!0;for(let n=0;n(Object.assign(t,e),t);function ts(e,t,r,n){if(typeof e.setBigUint64=="function")return e.setBigUint64(t,r,n);let i=BigInt(32),s=BigInt(4294967295),o=Number(r>>i&s),a=Number(r&s),c=n?4:0,f=n?0:4;e.setUint32(t+c,o,n),e.setUint32(t+f,a,n)}function qn(e){if(!Number.isSafeInteger(e)||e<0)throw new Error(`Wrong positive integer: ${e}`)}function es(e){if(typeof e!="boolean")throw new Error(`Expected boolean, not ${e}`)}function Sr(e,...t){if(!(e instanceof Uint8Array))throw new Error("Expected Uint8Array");if(t.length>0&&!t.includes(e.length))throw new Error(`Expected Uint8Array of length ${t}, not of length=${e.length}`)}function rs(e,t=!0){if(e.destroyed)throw new Error("Hash instance has been destroyed");if(t&&e.finished)throw new Error("Hash#digest() has already been called")}function Ba(e,t){Sr(e);let r=t.outputLen;if(e.lengthe[t++]&255|(e[t++]&255)<<8,ns=class{constructor(t){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,t=Hn(t),Je(t,32);let r=Kt(t,0),n=Kt(t,2),i=Kt(t,4),s=Kt(t,6),o=Kt(t,8),a=Kt(t,10),c=Kt(t,12),f=Kt(t,14);this.r[0]=r&8191,this.r[1]=(r>>>13|n<<3)&8191,this.r[2]=(n>>>10|i<<6)&7939,this.r[3]=(i>>>7|s<<9)&8191,this.r[4]=(s>>>4|o<<12)&255,this.r[5]=o>>>1&8190,this.r[6]=(o>>>14|a<<2)&8191,this.r[7]=(a>>>11|c<<5)&8065,this.r[8]=(c>>>8|f<<8)&8191,this.r[9]=f>>>5&127;for(let u=0;u<8;u++)this.pad[u]=Kt(t,16+2*u)}process(t,r,n=!1){let i=n?0:2048,{h:s,r:o}=this,a=o[0],c=o[1],f=o[2],u=o[3],h=o[4],l=o[5],x=o[6],p=o[7],d=o[8],y=o[9],g=Kt(t,r+0),v=Kt(t,r+2),m=Kt(t,r+4),C=Kt(t,r+6),S=Kt(t,r+8),B=Kt(t,r+10),R=Kt(t,r+12),L=Kt(t,r+14),O=s[0]+(g&8191),M=s[1]+((g>>>13|v<<3)&8191),U=s[2]+((v>>>10|m<<6)&8191),q=s[3]+((m>>>7|C<<9)&8191),z=s[4]+((C>>>4|S<<12)&8191),Z=s[5]+(S>>>1&8191),A=s[6]+((S>>>14|B<<2)&8191),N=s[7]+((B>>>11|R<<5)&8191),T=s[8]+((R>>>8|L<<8)&8191),_=s[9]+(L>>>5|i),w=0,k=w+O*a+M*(5*y)+U*(5*d)+q*(5*p)+z*(5*x);w=k>>>13,k&=8191,k+=Z*(5*l)+A*(5*h)+N*(5*u)+T*(5*f)+_*(5*c),w+=k>>>13,k&=8191;let K=w+O*c+M*a+U*(5*y)+q*(5*d)+z*(5*p);w=K>>>13,K&=8191,K+=Z*(5*x)+A*(5*l)+N*(5*h)+T*(5*u)+_*(5*f),w+=K>>>13,K&=8191;let F=w+O*f+M*c+U*a+q*(5*y)+z*(5*d);w=F>>>13,F&=8191,F+=Z*(5*p)+A*(5*x)+N*(5*l)+T*(5*h)+_*(5*u),w+=F>>>13,F&=8191;let W=w+O*u+M*f+U*c+q*a+z*(5*y);w=W>>>13,W&=8191,W+=Z*(5*d)+A*(5*p)+N*(5*x)+T*(5*l)+_*(5*h),w+=W>>>13,W&=8191;let $=w+O*h+M*u+U*f+q*c+z*a;w=$>>>13,$&=8191,$+=Z*(5*y)+A*(5*d)+N*(5*p)+T*(5*x)+_*(5*l),w+=$>>>13,$&=8191;let et=w+O*l+M*h+U*u+q*f+z*c;w=et>>>13,et&=8191,et+=Z*a+A*(5*y)+N*(5*d)+T*(5*p)+_*(5*x),w+=et>>>13,et&=8191;let X=w+O*x+M*l+U*h+q*u+z*f;w=X>>>13,X&=8191,X+=Z*c+A*a+N*(5*y)+T*(5*d)+_*(5*p),w+=X>>>13,X&=8191;let J=w+O*p+M*x+U*l+q*h+z*u;w=J>>>13,J&=8191,J+=Z*f+A*c+N*a+T*(5*y)+_*(5*d),w+=J>>>13,J&=8191;let lt=w+O*d+M*p+U*x+q*l+z*h;w=lt>>>13,lt&=8191,lt+=Z*u+A*f+N*c+T*a+_*(5*y),w+=lt>>>13,lt&=8191;let ut=w+O*y+M*d+U*p+q*x+z*l;w=ut>>>13,ut&=8191,ut+=Z*h+A*u+N*f+T*c+_*a,w+=ut>>>13,ut&=8191,w=(w<<2)+w|0,w=w+k|0,k=w&8191,w=w>>>13,K+=w,s[0]=k,s[1]=K,s[2]=F,s[3]=W,s[4]=$,s[5]=et,s[6]=X,s[7]=J,s[8]=lt,s[9]=ut}finalize(){let{h:t,pad:r}=this,n=new Uint16Array(10),i=t[1]>>>13;t[1]&=8191;for(let a=2;a<10;a++)t[a]+=i,i=t[a]>>>13,t[a]&=8191;t[0]+=i*5,i=t[0]>>>13,t[0]&=8191,t[1]+=i,i=t[1]>>>13,t[1]&=8191,t[2]+=i,n[0]=t[0]+5,i=n[0]>>>13,n[0]&=8191;for(let a=1;a<10;a++)n[a]=t[a]+i,i=n[a]>>>13,n[a]&=8191;n[9]-=8192;let s=(i^1)-1;for(let a=0;a<10;a++)n[a]&=s;s=~s;for(let a=0;a<10;a++)t[a]=t[a]&s|n[a];t[0]=(t[0]|t[1]<<13)&65535,t[1]=(t[1]>>>3|t[2]<<10)&65535,t[2]=(t[2]>>>6|t[3]<<7)&65535,t[3]=(t[3]>>>9|t[4]<<4)&65535,t[4]=(t[4]>>>12|t[5]<<1|t[6]<<14)&65535,t[5]=(t[6]>>>2|t[7]<<11)&65535,t[6]=(t[7]>>>5|t[8]<<8)&65535,t[7]=(t[8]>>>8|t[9]<<5)&65535;let o=t[0]+r[0];t[0]=o&65535;for(let a=1;a<8;a++)o=(t[a]+r[a]|0)+(o>>>16)|0,t[a]=o&65535}update(t){rs(this);let{buffer:r,blockLen:n}=this;t=Hn(t);let i=t.length;for(let s=0;s>>0,t[s++]=n[o]>>>8;return t}digest(){let{buffer:t,outputLen:r}=this;this.digestInto(t);let n=t.slice(0,r);return this.destroy(),n}};function Lu(e){let t=(n,i)=>e(i).update(Hn(n)).digest(),r=e(new Uint8Array(32));return t.outputLen=r.outputLen,t.blockLen=r.blockLen,t.create=n=>e(n),t}var Aa=Lu(e=>new ns(e));var Ru=Fn("expand 16-byte k"),Nu=Fn("expand 32-byte k"),Du=Be(Ru),Pu=Be(Nu);function G(e,t){return e<>>32-t}function is(e){return e.byteOffset%4===0}var zn=64,ku=16,Ia=2**32-1,Ca=new Uint32Array;function Uu(e,t,r,n,i,s,o,a){let c=i.length,f=new Uint8Array(zn),u=Be(f),h=is(i)&&is(s),l=h?Be(i):Ca,x=h?Be(s):Ca;for(let p=0;p=Ia)throw new Error("arx: counter overflow");let d=Math.min(zn,c-p);if(h&&d===zn){let y=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let g=0,v;g{Sr(a),Sr(c),Sr(f);let l=f.length;if(u||(u=new Uint8Array(l)),Sr(u),qn(h),h<0||h>=Ia)throw new Error("arx: counter overflow");if(u.length0;)x.pop().fill(0);return u}}function La(e,t,r,n,i,s=20){let o=e[0],a=e[1],c=e[2],f=e[3],u=t[0],h=t[1],l=t[2],x=t[3],p=t[4],d=t[5],y=t[6],g=t[7],v=i,m=r[0],C=r[1],S=r[2],B=o,R=a,L=c,O=f,M=u,U=h,q=l,z=x,Z=p,A=d,N=y,T=g,_=v,w=m,k=C,K=S;for(let W=0;W{e.update(t);let r=t.length%16;r&&e.update(Vu.subarray(r))},Fu=new Uint8Array(32);function _a(e,t,r,n,i){let s=e(t,r,Fu),o=Aa.create(s);i&&Ta(o,i),Ta(o,n);let a=new Uint8Array(16),c=wa(a);ts(c,0,BigInt(i?i.length:0),!0),ts(c,8,BigInt(n.length),!0),o.update(a);let f=o.digest();return s.fill(0),f}var Ra=e=>(t,r,n)=>(Je(t,32),Je(r),{encrypt:(s,o)=>{let a=s.length,c=a+16;o?Je(o,c):o=new Uint8Array(c),e(t,r,s,o,1);let f=_a(e,t,r,o.subarray(0,-16),n);return o.set(f,a),o},decrypt:(s,o)=>{let a=s.length,c=a-16;if(a<16)throw new Error("encrypted data must be at least 16 bytes");o?Je(o,c):o=new Uint8Array(c);let f=s.subarray(0,-16),u=s.subarray(-16),h=_a(e,t,r,f,n);if(!Sa(u,h))throw new Error("invalid tag");return e(t,r,f,o,1),o}}),os=ji({blockSize:64,nonceLength:12,tagLength:16},Ra(Ou)),Bx=ji({blockSize:64,nonceLength:24,tagLength:16},Ra(Mu));function Gn(e){if(!Number.isSafeInteger(e)||e<0)throw new Error(`Wrong positive integer: ${e}`)}function as(e,...t){if(!(e instanceof Uint8Array))throw new Error("Expected Uint8Array");if(t.length>0&&!t.includes(e.length))throw new Error(`Expected Uint8Array of length ${t}, not of length=${e.length}`)}function jr(e){if(typeof e!="function"||typeof e.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");Gn(e.outputLen),Gn(e.blockLen)}function Br(e,t=!0){if(e.destroyed)throw new Error("Hash instance has been destroyed");if(t&&e.finished)throw new Error("Hash#digest() has already been called")}function Na(e,t){as(e);let r=t.outputLen;if(e.lengthe instanceof Uint8Array;var Wn=e=>new DataView(e.buffer,e.byteOffset,e.byteLength),ie=(e,t)=>e<<32-t|e>>>t,Hu=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!Hu)throw new Error("Non little-endian hardware is not supported");function cs(e){if(typeof e!="string")throw new Error(`utf8ToBytes expected string, got ${typeof e}`);return new Uint8Array(new TextEncoder().encode(e))}function Ke(e){if(typeof e=="string"&&(e=cs(e)),!Da(e))throw new Error(`expected Uint8Array, got ${typeof e}`);return e}function $n(...e){let t=new Uint8Array(e.reduce((n,i)=>n+i.length,0)),r=0;return e.forEach(n=>{if(!Da(n))throw new Error("Uint8Array expected");t.set(n,r),r+=n.length}),t}var Ar=class{clone(){return this._cloneInto()}},_x={}.toString;function Zn(e){let t=n=>e().update(Ke(n)).digest(),r=e();return t.outputLen=r.outputLen,t.blockLen=r.blockLen,t.create=()=>e(),t}function je(e=32){if(Yn&&typeof Yn.getRandomValues=="function")return Yn.getRandomValues(new Uint8Array(e));throw new Error("crypto.getRandomValues must be defined")}function qu(e,t,r,n){if(typeof e.setBigUint64=="function")return e.setBigUint64(t,r,n);let i=BigInt(32),s=BigInt(4294967295),o=Number(r>>i&s),a=Number(r&s),c=n?4:0,f=n?0:4;e.setUint32(t+c,o,n),e.setUint32(t+f,a,n)}var Cr=class extends Ar{constructor(t,r,n,i){super(),this.blockLen=t,this.outputLen=r,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(t),this.view=Wn(this.buffer)}update(t){Br(this);let{view:r,buffer:n,blockLen:i}=this;t=Ke(t);let s=t.length;for(let o=0;oi-o&&(this.process(n,0),o=0);for(let h=o;hu.length)throw new Error("_sha2: outputLen bigger than state");for(let h=0;h>fs&Xn)}:{h:Number(e>>fs&Xn)|0,l:Number(e&Xn)|0}}function zu(e,t=!1){let r=new Uint32Array(e.length),n=new Uint32Array(e.length);for(let i=0;iBigInt(e>>>0)<>>0),Yu=(e,t,r)=>e>>>r,Wu=(e,t,r)=>e<<32-r|t>>>r,$u=(e,t,r)=>e>>>r|t<<32-r,Zu=(e,t,r)=>e<<32-r|t>>>r,Xu=(e,t,r)=>e<<64-r|t>>>r-32,Qu=(e,t,r)=>e>>>r-32|t<<64-r,Ju=(e,t)=>t,ju=(e,t)=>e,th=(e,t,r)=>e<>>32-r,eh=(e,t,r)=>t<>>32-r,rh=(e,t,r)=>t<>>64-r,nh=(e,t,r)=>e<>>64-r;function ih(e,t,r,n){let i=(t>>>0)+(n>>>0);return{h:e+r+(i/2**32|0)|0,l:i|0}}var sh=(e,t,r)=>(e>>>0)+(t>>>0)+(r>>>0),oh=(e,t,r,n)=>t+r+n+(e/2**32|0)|0,ah=(e,t,r,n)=>(e>>>0)+(t>>>0)+(r>>>0)+(n>>>0),ch=(e,t,r,n,i)=>t+r+n+i+(e/2**32|0)|0,fh=(e,t,r,n,i)=>(e>>>0)+(t>>>0)+(r>>>0)+(n>>>0)+(i>>>0),uh=(e,t,r,n,i,s)=>t+r+n+i+s+(e/2**32|0)|0;var hh={fromBig:Pa,split:zu,toBig:Gu,shrSH:Yu,shrSL:Wu,rotrSH:$u,rotrSL:Zu,rotrBH:Xu,rotrBL:Qu,rotr32H:Ju,rotr32L:ju,rotlSH:th,rotlSL:eh,rotlBH:rh,rotlBL:nh,add:ih,add3L:sh,add3H:oh,add4L:ah,add4H:ch,add5H:uh,add5L:fh},j=hh;var[lh,ph]=j.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(e=>BigInt(e))),Oe=new Uint32Array(80),Me=new Uint32Array(80),us=class extends Cr{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){let{Ah:t,Al:r,Bh:n,Bl:i,Ch:s,Cl:o,Dh:a,Dl:c,Eh:f,El:u,Fh:h,Fl:l,Gh:x,Gl:p,Hh:d,Hl:y}=this;return[t,r,n,i,s,o,a,c,f,u,h,l,x,p,d,y]}set(t,r,n,i,s,o,a,c,f,u,h,l,x,p,d,y){this.Ah=t|0,this.Al=r|0,this.Bh=n|0,this.Bl=i|0,this.Ch=s|0,this.Cl=o|0,this.Dh=a|0,this.Dl=c|0,this.Eh=f|0,this.El=u|0,this.Fh=h|0,this.Fl=l|0,this.Gh=x|0,this.Gl=p|0,this.Hh=d|0,this.Hl=y|0}process(t,r){for(let m=0;m<16;m++,r+=4)Oe[m]=t.getUint32(r),Me[m]=t.getUint32(r+=4);for(let m=16;m<80;m++){let C=Oe[m-15]|0,S=Me[m-15]|0,B=j.rotrSH(C,S,1)^j.rotrSH(C,S,8)^j.shrSH(C,S,7),R=j.rotrSL(C,S,1)^j.rotrSL(C,S,8)^j.shrSL(C,S,7),L=Oe[m-2]|0,O=Me[m-2]|0,M=j.rotrSH(L,O,19)^j.rotrBH(L,O,61)^j.shrSH(L,O,6),U=j.rotrSL(L,O,19)^j.rotrBL(L,O,61)^j.shrSL(L,O,6),q=j.add4L(R,U,Me[m-7],Me[m-16]),z=j.add4H(q,B,M,Oe[m-7],Oe[m-16]);Oe[m]=z|0,Me[m]=q|0}let{Ah:n,Al:i,Bh:s,Bl:o,Ch:a,Cl:c,Dh:f,Dl:u,Eh:h,El:l,Fh:x,Fl:p,Gh:d,Gl:y,Hh:g,Hl:v}=this;for(let m=0;m<80;m++){let C=j.rotrSH(h,l,14)^j.rotrSH(h,l,18)^j.rotrBH(h,l,41),S=j.rotrSL(h,l,14)^j.rotrSL(h,l,18)^j.rotrBL(h,l,41),B=h&x^~h&d,R=l&p^~l&y,L=j.add5L(v,S,R,ph[m],Me[m]),O=j.add5H(L,g,C,B,lh[m],Oe[m]),M=L|0,U=j.rotrSH(n,i,28)^j.rotrBH(n,i,34)^j.rotrBH(n,i,39),q=j.rotrSL(n,i,28)^j.rotrBL(n,i,34)^j.rotrBL(n,i,39),z=n&s^n&a^s&a,Z=i&o^i&c^o&c;g=d|0,v=y|0,d=x|0,y=p|0,x=h|0,p=l|0,{h,l}=j.add(f|0,u|0,O|0,M|0),f=a|0,u=c|0,a=s|0,c=o|0,s=n|0,o=i|0;let A=j.add3L(M,q,Z);n=j.add3H(A,O,U,z),i=A|0}({h:n,l:i}=j.add(this.Ah|0,this.Al|0,n|0,i|0)),{h:s,l:o}=j.add(this.Bh|0,this.Bl|0,s|0,o|0),{h:a,l:c}=j.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:f,l:u}=j.add(this.Dh|0,this.Dl|0,f|0,u|0),{h,l}=j.add(this.Eh|0,this.El|0,h|0,l|0),{h:x,l:p}=j.add(this.Fh|0,this.Fl|0,x|0,p|0),{h:d,l:y}=j.add(this.Gh|0,this.Gl|0,d|0,y|0),{h:g,l:v}=j.add(this.Hh|0,this.Hl|0,g|0,v|0),this.set(n,i,s,o,a,c,f,u,h,l,x,p,d,y,g,v)}roundClean(){Oe.fill(0),Me.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var hs=Zn(()=>new us);var jn={};Lt(jn,{bitGet:()=>vh,bitLen:()=>bh,bitMask:()=>tn,bitSet:()=>wh,bytesToHex:()=>Ae,bytesToNumberBE:()=>Ce,bytesToNumberLE:()=>se,concatBytes:()=>Te,createHmacDrbg:()=>ds,ensureBytes:()=>yt,equalBytes:()=>gh,hexToBytes:()=>tr,hexToNumber:()=>ps,numberToBytesBE:()=>Ve,numberToBytesLE:()=>Ie,numberToHexUnpadded:()=>Ka,numberToVarBytesBE:()=>xh,utf8ToBytes:()=>mh,validateObject:()=>Jt});var Ua=BigInt(0),Qn=BigInt(1),dh=BigInt(2),Jn=e=>e instanceof Uint8Array,yh=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));function Ae(e){if(!Jn(e))throw new Error("Uint8Array expected");let t="";for(let r=0;rn+i.length,0)),r=0;return e.forEach(n=>{if(!Jn(n))throw new Error("Uint8Array expected");t.set(n,r),r+=n.length}),t}function gh(e,t){if(e.length!==t.length)return!1;for(let r=0;rUa;e>>=Qn,t+=1);return t}function vh(e,t){return e>>BigInt(t)&Qn}var wh=(e,t,r)=>e|(r?Qn:Ua)<(dh<new Uint8Array(e),ka=e=>Uint8Array.from(e);function ds(e,t,r){if(typeof e!="number"||e<2)throw new Error("hashLen must be a number");if(typeof t!="number"||t<2)throw new Error("qByteLen must be a number");if(typeof r!="function")throw new Error("hmacFn must be a function");let n=ls(e),i=ls(e),s=0,o=()=>{n.fill(1),i.fill(0),s=0},a=(...h)=>r(i,n,...h),c=(h=ls())=>{i=a(ka([0]),h),n=a(),h.length!==0&&(i=a(ka([1]),h),n=a())},f=()=>{if(s++>=1e3)throw new Error("drbg: tried 1000 values");let h=0,l=[];for(;h{o(),c(h);let x;for(;!(x=l(f()));)c();return o(),x}}var Eh={bigint:e=>typeof e=="bigint",function:e=>typeof e=="function",boolean:e=>typeof e=="boolean",string:e=>typeof e=="string",stringOrUint8Array:e=>typeof e=="string"||e instanceof Uint8Array,isSafeInteger:e=>Number.isSafeInteger(e),array:e=>Array.isArray(e),field:(e,t)=>t.Fp.isValid(e),hash:e=>typeof e=="function"&&Number.isSafeInteger(e.outputLen)};function Jt(e,t,r={}){let n=(i,s,o)=>{let a=Eh[s];if(typeof a!="function")throw new Error(`Invalid validator "${s}", expected function`);let c=e[i];if(!(o&&c===void 0)&&!a(c,e))throw new Error(`Invalid param ${String(i)}=${c} (${typeof c}), expected ${s}`)};for(let[i,s]of Object.entries(t))n(i,s,!1);for(let[i,s]of Object.entries(r))n(i,s,!0);return e}var _t=BigInt(0),bt=BigInt(1),er=BigInt(2),Sh=BigInt(3),ys=BigInt(4),Oa=BigInt(5),Ma=BigInt(8),Bh=BigInt(9),Ah=BigInt(16);function at(e,t){let r=e%t;return r>=_t?r:t+r}function xs(e,t,r){if(r<=_t||t<_t)throw new Error("Expected power/modulo > 0");if(r===bt)return _t;let n=bt;for(;t>_t;)t&bt&&(n=n*e%r),e=e*e%r,t>>=bt;return n}function xt(e,t,r){let n=e;for(;t-- >_t;)n*=n,n%=r;return n}function ti(e,t){if(e===_t||t<=_t)throw new Error(`invert: expected positive integers, got n=${e} mod=${t}`);let r=at(e,t),n=t,i=_t,s=bt,o=bt,a=_t;for(;r!==_t;){let f=n/r,u=n%r,h=i-o*f,l=s-a*f;n=r,r=u,i=o,s=a,o=h,a=l}if(n!==bt)throw new Error("invert: does not exist");return at(i,t)}function Ch(e){let t=(e-bt)/er,r,n,i;for(r=e-bt,n=0;r%er===_t;r/=er,n++);for(i=er;i(at(e,t)&bt)===bt,Th=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function gs(e){let t={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},r=Th.reduce((n,i)=>(n[i]="function",n),t);return Jt(e,r)}function _h(e,t,r){if(r<_t)throw new Error("Expected power > 0");if(r===_t)return e.ONE;if(r===bt)return t;let n=e.ONE,i=t;for(;r>_t;)r&bt&&(n=e.mul(n,i)),i=e.sqr(i),r>>=bt;return n}function Lh(e,t){let r=new Array(t.length),n=t.reduce((s,o,a)=>e.is0(o)?s:(r[a]=s,e.mul(s,o)),e.ONE),i=e.inv(n);return t.reduceRight((s,o,a)=>e.is0(o)?s:(r[a]=e.mul(s,r[a]),e.mul(s,o)),i),r}function ms(e,t){let r=t!==void 0?t:e.toString(2).length,n=Math.ceil(r/8);return{nBitLength:r,nByteLength:n}}function ei(e,t,r=!1,n={}){if(e<=_t)throw new Error(`Expected Field ORDER > 0, got ${e}`);let{nBitLength:i,nByteLength:s}=ms(e,t);if(s>2048)throw new Error("Field lengths over 2048 bytes are not supported");let o=Ih(e),a=Object.freeze({ORDER:e,BITS:i,BYTES:s,MASK:tn(i),ZERO:_t,ONE:bt,create:c=>at(c,e),isValid:c=>{if(typeof c!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof c}`);return _t<=c&&cc===_t,isOdd:c=>(c&bt)===bt,neg:c=>at(-c,e),eql:(c,f)=>c===f,sqr:c=>at(c*c,e),add:(c,f)=>at(c+f,e),sub:(c,f)=>at(c-f,e),mul:(c,f)=>at(c*f,e),pow:(c,f)=>_h(a,c,f),div:(c,f)=>at(c*ti(f,e),e),sqrN:c=>c*c,addN:(c,f)=>c+f,subN:(c,f)=>c-f,mulN:(c,f)=>c*f,inv:c=>ti(c,e),sqrt:n.sqrt||(c=>o(a,c)),invertBatch:c=>Lh(a,c),cmov:(c,f,u)=>u?f:c,toBytes:c=>r?Ie(c,s):Ve(c,s),fromBytes:c=>{if(c.length!==s)throw new Error(`Fp.fromBytes: expected ${s}, got ${c.length}`);return r?se(c):Ce(c)}});return Object.freeze(a)}function Fa(e,t){if(!e.isOdd)throw new Error("Field doesn't have isOdd");let r=e.sqrt(t);return e.isOdd(r)?e.neg(r):r}function Ha(e){if(typeof e!="bigint")throw new Error("field order must be bigint");let t=e.toString(2).length;return Math.ceil(t/8)}function bs(e){let t=Ha(e);return t+Math.ceil(t/2)}function qa(e,t,r=!1){let n=e.length,i=Ha(t),s=bs(t);if(n<16||n1024)throw new Error(`expected ${s}-1024 bytes of input, got ${n}`);let o=r?Ce(e):se(e),a=at(o,t-bt)+bt;return r?Ie(a,i):Ve(a,i)}var Nh=BigInt(0),vs=BigInt(1);function ri(e,t){let r=(i,s)=>{let o=s.negate();return i?o:s},n=i=>{let s=Math.ceil(t/i)+1,o=2**(i-1);return{windows:s,windowSize:o}};return{constTimeNegate:r,unsafeLadder(i,s){let o=e.ZERO,a=i;for(;s>Nh;)s&vs&&(o=o.add(a)),a=a.double(),s>>=vs;return o},precomputeWindow(i,s){let{windows:o,windowSize:a}=n(s),c=[],f=i,u=f;for(let h=0;h>=x,y>c&&(y-=l,o+=vs);let g=d,v=d+Math.abs(y)-1,m=p%2!==0,C=y<0;y===0?u=u.add(r(m,s[g])):f=f.add(r(C,s[v]))}return{p:f,f:u}},wNAFCached(i,s,o,a){let c=i._WINDOW_SIZE||1,f=s.get(i);return f||(f=this.precomputeWindow(i,c),c!==1&&s.set(i,a(f))),this.wNAF(c,f,o)}}}function en(e){return gs(e.Fp),Jt(e,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...ms(e.n,e.nBitLength),...e,p:e.Fp.ORDER})}var oe=BigInt(0),Xt=BigInt(1),ni=BigInt(2),Dh=BigInt(8),Ph={zip215:!0};function kh(e){let t=en(e);return Jt(e,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...t})}function ii(e){let t=kh(e),{Fp:r,n,prehash:i,hash:s,randomBytes:o,nByteLength:a,h:c}=t,f=ni<{try{return{isValid:!0,value:r.sqrt(_*r.inv(w))}}catch{return{isValid:!1,value:oe}}}),l=t.adjustScalarBytes||(_=>_),x=t.domain||((_,w,k)=>{if(w.length||k)throw new Error("Contexts/pre-hash are not supported");return _}),p=_=>typeof _=="bigint"&&oe<_,d=(_,w)=>p(_)&&p(w)&&__===oe||d(_,f);function g(_,w){if(d(_,w))return _;throw new Error(`Expected valid scalar < ${w}, got ${typeof _} ${_}`)}function v(_){return _===oe?_:g(_,n)}let m=new Map;function C(_){if(!(_ instanceof S))throw new Error("ExtendedPoint expected")}class S{constructor(w,k,K,F){if(this.ex=w,this.ey=k,this.ez=K,this.et=F,!y(w))throw new Error("x required");if(!y(k))throw new Error("y required");if(!y(K))throw new Error("z required");if(!y(F))throw new Error("t required")}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(w){if(w instanceof S)throw new Error("extended point not allowed");let{x:k,y:K}=w||{};if(!y(k)||!y(K))throw new Error("invalid affine point");return new S(k,K,Xt,u(k*K))}static normalizeZ(w){let k=r.invertBatch(w.map(K=>K.ez));return w.map((K,F)=>K.toAffine(k[F])).map(S.fromAffine)}_setWindowSize(w){this._WINDOW_SIZE=w,m.delete(this)}assertValidity(){let{a:w,d:k}=t;if(this.is0())throw new Error("bad point: ZERO");let{ex:K,ey:F,ez:W,et:$}=this,et=u(K*K),X=u(F*F),J=u(W*W),lt=u(J*J),ut=u(et*w),kt=u(J*u(ut+X)),Ut=u(lt+u(k*u(et*X)));if(kt!==Ut)throw new Error("bad point: equation left != right (1)");let Tt=u(K*F),Mt=u(W*$);if(Tt!==Mt)throw new Error("bad point: equation left != right (2)")}equals(w){C(w);let{ex:k,ey:K,ez:F}=this,{ex:W,ey:$,ez:et}=w,X=u(k*et),J=u(W*F),lt=u(K*et),ut=u($*F);return X===J&<===ut}is0(){return this.equals(S.ZERO)}negate(){return new S(u(-this.ex),this.ey,this.ez,u(-this.et))}double(){let{a:w}=t,{ex:k,ey:K,ez:F}=this,W=u(k*k),$=u(K*K),et=u(ni*u(F*F)),X=u(w*W),J=k+K,lt=u(u(J*J)-W-$),ut=X+$,kt=ut-et,Ut=X-$,Tt=u(lt*kt),Mt=u(ut*Ut),we=u(lt*Ut),Xe=u(kt*ut);return new S(Tt,Mt,Xe,we)}add(w){C(w);let{a:k,d:K}=t,{ex:F,ey:W,ez:$,et}=this,{ex:X,ey:J,ez:lt,et:ut}=w;if(k===BigInt(-1)){let Jo=u((W-F)*(J+X)),jo=u((W+F)*(J-X)),Vi=u(jo-Jo);if(Vi===oe)return this.double();let ta=u($*ni*ut),ea=u(et*ni*lt),ra=ea+ta,na=jo+Jo,ia=ea-ta,eu=u(ra*Vi),ru=u(na*ia),nu=u(ra*ia),iu=u(Vi*na);return new S(eu,ru,iu,nu)}let kt=u(F*X),Ut=u(W*J),Tt=u(et*K*ut),Mt=u($*lt),we=u((F+W)*(X+J)-kt-Ut),Xe=Mt-Tt,Xr=Mt+Tt,Qo=u(Ut-k*kt),Qf=u(we*Xe),Jf=u(Xr*Qo),jf=u(we*Qo),tu=u(Xe*Xr);return new S(Qf,Jf,tu,jf)}subtract(w){return this.add(w.negate())}wNAF(w){return L.wNAFCached(this,m,w,S.normalizeZ)}multiply(w){let{p:k,f:K}=this.wNAF(g(w,n));return S.normalizeZ([k,K])[0]}multiplyUnsafe(w){let k=v(w);return k===oe?R:this.equals(R)||k===Xt?this:this.equals(B)?this.wNAF(k).p:L.unsafeLadder(this,k)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return L.unsafeLadder(this,n).is0()}toAffine(w){let{ex:k,ey:K,ez:F}=this,W=this.is0();w==null&&(w=W?Dh:r.inv(F));let $=u(k*w),et=u(K*w),X=u(F*w);if(W)return{x:oe,y:Xt};if(X!==Xt)throw new Error("invZ was invalid");return{x:$,y:et}}clearCofactor(){let{h:w}=t;return w===Xt?this:this.multiplyUnsafe(w)}static fromHex(w,k=!1){let{d:K,a:F}=t,W=r.BYTES;w=yt("pointHex",w,W);let $=w.slice(),et=w[W-1];$[W-1]=et&-129;let X=se($);X===oe||(k?g(X,f):g(X,r.ORDER));let J=u(X*X),lt=u(J-Xt),ut=u(K*J-F),{isValid:kt,value:Ut}=h(lt,ut);if(!kt)throw new Error("Point.fromHex: invalid y coordinate");let Tt=(Ut&Xt)===Xt,Mt=(et&128)!==0;if(!k&&Ut===oe&&Mt)throw new Error("Point.fromHex: x=0 and x_0=1");return Mt!==Tt&&(Ut=u(-Ut)),S.fromAffine({x:Ut,y:X})}static fromPrivateKey(w){return U(w).point}toRawBytes(){let{x:w,y:k}=this.toAffine(),K=Ie(k,r.BYTES);return K[K.length-1]|=w&Xt?128:0,K}toHex(){return Ae(this.toRawBytes())}}S.BASE=new S(t.Gx,t.Gy,Xt,u(t.Gx*t.Gy)),S.ZERO=new S(oe,Xt,Xt,oe);let{BASE:B,ZERO:R}=S,L=ri(S,a*8);function O(_){return at(_,n)}function M(_){return O(se(_))}function U(_){let w=a;_=yt("private key",_,w);let k=yt("hashed private key",s(_),2*w),K=l(k.slice(0,w)),F=k.slice(w,2*w),W=M(K),$=B.multiply(W),et=$.toRawBytes();return{head:K,prefix:F,scalar:W,point:$,pointBytes:et}}function q(_){return U(_).pointBytes}function z(_=new Uint8Array,...w){let k=Te(...w);return M(s(x(k,yt("context",_),!!i)))}function Z(_,w,k={}){_=yt("message",_),i&&(_=i(_));let{prefix:K,scalar:F,pointBytes:W}=U(w),$=z(k.context,K,_),et=B.multiply($).toRawBytes(),X=z(k.context,et,W,_),J=O($+X*F);v(J);let lt=Te(et,Ie(J,r.BYTES));return yt("result",lt,a*2)}let A=Ph;function N(_,w,k,K=A){let{context:F,zip215:W}=K,$=r.BYTES;_=yt("signature",_,2*$),w=yt("message",w),i&&(w=i(w));let et=se(_.slice($,2*$)),X,J,lt;try{X=S.fromHex(k,W),J=S.fromHex(_.slice(0,$),W),lt=B.multiplyUnsafe(et)}catch{return!1}if(!W&&X.isSmallOrder())return!1;let ut=z(F,J.toRawBytes(),X.toRawBytes(),w);return J.add(X.multiplyUnsafe(ut)).subtract(lt).clearCofactor().equals(S.ZERO)}return B._setWindowSize(8),{CURVE:t,getPublicKey:q,sign:Z,verify:N,ExtendedPoint:S,utils:{getExtendedPublicKey:U,randomPrivateKey:()=>o(r.BYTES),precompute(_=8,w=S.BASE){return w._setWindowSize(_),w.multiply(BigInt(3)),w}}}}var rn=BigInt(0),ws=BigInt(1);function Uh(e){return Jt(e,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...e})}function za(e){let t=Uh(e),{P:r}=t,n=m=>at(m,r),i=t.montgomeryBits,s=Math.ceil(i/8),o=t.nByteLength,a=t.adjustScalarBytes||(m=>m),c=t.powPminus2||(m=>xs(m,r-BigInt(2),r));function f(m,C,S){let B=n(m*(C-S));return C=n(C-B),S=n(S+B),[C,S]}function u(m){if(typeof m=="bigint"&&rn<=m&&m=rn;A--){let N=B>>A&ws;q^=N,z=f(q,L,M),L=z[0],M=z[1],z=f(q,O,U),O=z[0],U=z[1],q=N;let T=L+O,_=n(T*T),w=L-O,k=n(w*w),K=_-k,F=M+U,W=M-U,$=n(W*T),et=n(F*w),X=$+et,J=$-et;M=n(X*X),U=n(R*n(J*J)),L=n(_*k),O=n(K*(_+n(h*K)))}z=f(q,L,M),L=z[0],M=z[1],z=f(q,O,U),O=z[0],U=z[1];let Z=c(O);return n(L*Z)}function x(m){return Ie(n(m),s)}function p(m){let C=yt("u coordinate",m,s);return o===s&&(C[o-1]&=127),se(C)}function d(m){let C=yt("scalar",m);if(C.length!==s&&C.length!==o)throw new Error(`Expected ${s} or ${o} bytes, got ${C.length}`);return se(a(C))}function y(m,C){let S=p(C),B=d(m),R=l(S,B);if(R===rn)throw new Error("Invalid private or public key received");return x(R)}let g=x(t.Gu);function v(m){return y(m,g)}return{scalarMult:y,scalarMultBase:v,getSharedSecret:(m,C)=>y(m,C),getPublicKey:m=>v(m),utils:{randomPrivateKey:()=>t.randomBytes(t.nByteLength)},GuBytes:g}}var nn=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),Ga=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),eg=BigInt(0),Kh=BigInt(1),Es=BigInt(2),Oh=BigInt(5),Ya=BigInt(10),Mh=BigInt(20),Vh=BigInt(40),Wa=BigInt(80);function $a(e){let t=nn,n=e*e%t*e%t,i=xt(n,Es,t)*n%t,s=xt(i,Kh,t)*e%t,o=xt(s,Oh,t)*s%t,a=xt(o,Ya,t)*o%t,c=xt(a,Mh,t)*a%t,f=xt(c,Vh,t)*c%t,u=xt(f,Wa,t)*f%t,h=xt(u,Wa,t)*f%t,l=xt(h,Ya,t)*o%t;return{pow_p_5_8:xt(l,Es,t)*e%t,b2:n}}function Za(e){return e[0]&=248,e[31]&=127,e[31]|=64,e}function Fh(e,t){let r=nn,n=at(t*t*t,r),i=at(n*n*t,r),s=$a(e*i).pow_p_5_8,o=at(e*n*s,r),a=at(t*o*o,r),c=o,f=at(o*Ga,r),u=a===e,h=a===at(-e,r),l=a===at(-e*Ga,r);return u&&(o=c),(h||l)&&(o=f),Va(o,r)&&(o=at(-o,r)),{isValid:u||h,value:o}}var _e=ei(nn,void 0,!0),Ss={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:_e,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:BigInt(8),Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:hs,randomBytes:je,adjustScalarBytes:Za,uvRatio:Fh},Ir=ii(Ss);function Xa(e,t,r){if(t.length>255)throw new Error("Context is too big");return $n(cs("SigEd25519 no Ed25519 collisions"),new Uint8Array([r?1:0,t.length]),t,e)}var rg=ii({...Ss,domain:Xa}),ng=ii({...Ss,domain:Xa,prehash:hs}),sn=za({P:nn,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:e=>{let t=nn,{pow_p_5_8:r,b2:n}=$a(e);return at(xt(r,BigInt(3),t)*n,t)},adjustScalarBytes:Za,randomBytes:je});var Hh=(_e.ORDER+BigInt(3))/BigInt(8),ig=_e.pow(Es,Hh),sg=_e.sqrt(_e.neg(_e.ONE)),og=(_e.ORDER-BigInt(5))/BigInt(8),ag=BigInt(486662);var cg=Fa(_e,_e.neg(BigInt(486664)));var fg=BigInt("25063068953384623474111414158702152701244531502492656460079210482610430750235"),ug=BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578"),hg=BigInt("1159843021668779879193775521855586647937357759715417654439879720876111806838"),lg=BigInt("40440834346308536858101042469323190826248399146238708352240133220865137265952");var pg=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");var si=class extends Ar{constructor(t,r){super(),this.finished=!1,this.destroyed=!1,jr(t);let n=Ke(r);if(this.iHash=t.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let i=this.blockLen,s=new Uint8Array(i);s.set(n.length>i?t.create().update(n).digest():n);for(let o=0;onew si(e,t).update(r).digest();Tr.create=(e,t)=>new si(e,t);function Ja(e,t,r){return jr(e),r===void 0&&(r=new Uint8Array(e.outputLen)),Tr(e,Ke(r),Ke(t))}var Bs=new Uint8Array([0]),Qa=new Uint8Array;function ja(e,t,r,n=32){if(jr(e),Gn(n),n>255*e.outputLen)throw new Error("Length should be <= 255*HashLen");let i=Math.ceil(n/e.outputLen);r===void 0&&(r=Qa);let s=new Uint8Array(i*e.outputLen),o=Tr.create(e,t),a=o._cloneInto(),c=new Uint8Array(o.outputLen);for(let f=0;fe&t^~e&r,zh=(e,t,r)=>e&t^e&r^t&r,Gh=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Fe=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),He=new Uint32Array(64),As=class extends Cr{constructor(){super(64,32,8,!1),this.A=Fe[0]|0,this.B=Fe[1]|0,this.C=Fe[2]|0,this.D=Fe[3]|0,this.E=Fe[4]|0,this.F=Fe[5]|0,this.G=Fe[6]|0,this.H=Fe[7]|0}get(){let{A:t,B:r,C:n,D:i,E:s,F:o,G:a,H:c}=this;return[t,r,n,i,s,o,a,c]}set(t,r,n,i,s,o,a,c){this.A=t|0,this.B=r|0,this.C=n|0,this.D=i|0,this.E=s|0,this.F=o|0,this.G=a|0,this.H=c|0}process(t,r){for(let h=0;h<16;h++,r+=4)He[h]=t.getUint32(r,!1);for(let h=16;h<64;h++){let l=He[h-15],x=He[h-2],p=ie(l,7)^ie(l,18)^l>>>3,d=ie(x,17)^ie(x,19)^x>>>10;He[h]=d+He[h-7]+p+He[h-16]|0}let{A:n,B:i,C:s,D:o,E:a,F:c,G:f,H:u}=this;for(let h=0;h<64;h++){let l=ie(a,6)^ie(a,11)^ie(a,25),x=u+l+qh(a,c,f)+Gh[h]+He[h]|0,d=(ie(n,2)^ie(n,13)^ie(n,22))+zh(n,i,s)|0;u=f,f=c,c=a,a=o+x|0,o=s,s=i,i=n,n=x+d|0}n=n+this.A|0,i=i+this.B|0,s=s+this.C|0,o=o+this.D|0,a=a+this.E|0,c=c+this.F|0,f=f+this.G|0,u=u+this.H|0,this.set(n,i,s,o,a,c,f,u)}roundClean(){He.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var _r=Zn(()=>new As);var oi={hashSHA256(e){return _r(e.subarray())},getHKDF(e,t){let r=Ja(_r,t,e),i=ja(_r,r,void 0,96),s=i.subarray(0,32),o=i.subarray(32,64),a=i.subarray(64,96);return[s,o,a]},generateX25519KeyPair(){let e=sn.utils.randomPrivateKey();return{publicKey:sn.getPublicKey(e),privateKey:e}},generateX25519KeyPairFromSeed(e){return{publicKey:sn.getPublicKey(e),privateKey:e}},generateX25519SharedKey(e,t){return sn.getSharedSecret(e.subarray(),t.subarray())},chaCha20Poly1305Encrypt(e,t,r,n){return os(n,t,r).encrypt(e.subarray())},chaCha20Poly1305Decrypt(e,t,r,n,i){return os(n,t,r).decrypt(e.subarray(),i)}};var t0=oi;var Lr=e=>{let t=Bt(2);return new DataView(t.buffer,t.byteOffset,t.byteLength).setUint16(0,e,!1),t};Lr.bytes=2;var on=e=>{if(e.length<2)throw RangeError("Could not decode int16BE");return e instanceof Uint8Array?new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1):e.getUint16(0)};on.bytes=2;function e0(e){return new At(e.ne,e.ciphertext)}function r0(e){return new At(e.ne,e.ns,e.ciphertext)}function n0(e){return new At(e.ns,e.ciphertext)}function i0(e){if(e.length<32)throw new Error("Cannot decode stage 0 MessageBuffer: length less than 32 bytes.");return{ne:e.subarray(0,32),ciphertext:e.subarray(32,e.length),ns:rt(0)}}function s0(e){if(e.length<80)throw new Error("Cannot decode stage 1 MessageBuffer: length less than 80 bytes.");return{ne:e.subarray(0,32),ns:e.subarray(32,80),ciphertext:e.subarray(80,e.length)}}function o0(e){if(e.length<48)throw new Error("Cannot decode stage 2 MessageBuffer: length less than 48 bytes.");return{ne:rt(0),ns:e.subarray(0,48),ciphertext:e.subarray(48,e.length)}}var Cs=16;function c0(e,t){return async function*(r){for await(let n of r)for(let i=0;in.length&&(s=n.length);let o;n instanceof Uint8Array?o=e.encrypt(n.subarray(i,s),e.session):o=e.encrypt(n.sublist(i,s),e.session),t?.encryptedPackets.increment(),yield new At(Lr(o.byteLength),o)}}}function f0(e,t){return async function*(r){for await(let n of r)for(let i=0;in.length&&(s=n.length),s-Cswd});function xd(e,t){if(e.length>=255)throw new TypeError("Alphabet too long");for(var r=new Uint8Array(256),n=0;n>>0,C=new Uint8Array(m);g!==v;){for(var S=p[g],B=0,R=m-1;(S!==0||B>>0,C[R]=S%a>>>0,S=S/a>>>0;if(S!==0)throw new Error("Non-zero carry");y=B,g++}for(var L=m-y;L!==m&&C[L]===0;)L++;for(var O=c.repeat(d);L>>0,m=new Uint8Array(v);p[d];){var C=r[p.charCodeAt(d)];if(C===255)return;for(var S=0,B=v-1;(C!==0||S>>0,m[B]=C%256>>>0,C=C/256>>>0;if(C!==0)throw new Error("Non-zero carry");g=S,d++}if(p[d]!==" "){for(var R=v-g;R!==v&&m[R]===0;)R++;for(var L=new Uint8Array(y+(v-R)),O=y;R!==v;)L[O++]=m[R++];return L}}}function x(p){var d=l(p);if(d)return d;throw new Error(`Non-${t} character`)}return{encode:h,decodeUnsafe:l,decode:x}}var gd=xd,md=gd,_c=md;var rm=new Uint8Array(0);var Lc=(e,t)=>{if(e===t)return!0;if(e.byteLength!==t.byteLength)return!1;for(let r=0;r{if(e instanceof Uint8Array&&e.constructor.name==="Uint8Array")return e;if(e instanceof ArrayBuffer)return new Uint8Array(e);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw new Error("Unknown type, must be binary type")};var Rc=e=>new TextEncoder().encode(e),Nc=e=>new TextDecoder().decode(e);var Xs=class{constructor(t,r,n){this.name=t,this.prefix=r,this.baseEncode=n}encode(t){if(t instanceof Uint8Array)return`${this.prefix}${this.baseEncode(t)}`;throw Error("Unknown type, must be binary type")}},Qs=class{constructor(t,r,n){if(this.name=t,this.prefix=r,r.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=r.codePointAt(0),this.baseDecode=n}decode(t){if(typeof t=="string"){if(t.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(t)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(t.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(t){return Pc(this,t)}},Js=class{constructor(t){this.decoders=t}or(t){return Pc(this,t)}decode(t){let r=t[0],n=this.decoders[r];if(n)return n.decode(t);throw RangeError(`Unable to decode multibase string ${JSON.stringify(t)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}},Pc=(e,t)=>new Js({...e.decoders||{[e.prefix]:e},...t.decoders||{[t.prefix]:t}}),js=class{constructor(t,r,n,i){this.name=t,this.prefix=r,this.baseEncode=n,this.baseDecode=i,this.encoder=new Xs(t,r,n),this.decoder=new Qs(t,r,i)}encode(t){return this.encoder.encode(t)}decode(t){return this.decoder.decode(t)}},kr=({name:e,prefix:t,encode:r,decode:n})=>new js(e,t,r,n),We=({prefix:e,name:t,alphabet:r})=>{let{encode:n,decode:i}=_c(r,t);return kr({prefix:e,name:t,encode:n,decode:s=>De(i(s))})},bd=(e,t,r,n)=>{let i={};for(let u=0;u=8&&(a-=8,o[f++]=255&c>>a)}if(a>=r||255&c<<8-a)throw new SyntaxError("Unexpected end of data");return o},vd=(e,t,r)=>{let n=t[t.length-1]==="=",i=(1<r;)o-=r,s+=t[i&a>>o];if(o&&(s+=t[i&a<kr({prefix:t,name:e,encode(i){return vd(i,n,r)},decode(i){return bd(i,n,r,e)}});var wd=We({prefix:"9",name:"base10",alphabet:"0123456789"});var eo={};Lt(eo,{base16:()=>Ed,base16upper:()=>Sd});var Ed=St({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),Sd=St({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var ro={};Lt(ro,{base2:()=>Bd});var Bd=St({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var no={};Lt(no,{base256emoji:()=>_d});var kc=Array.from("\u{1F680}\u{1FA90}\u2604\u{1F6F0}\u{1F30C}\u{1F311}\u{1F312}\u{1F313}\u{1F314}\u{1F315}\u{1F316}\u{1F317}\u{1F318}\u{1F30D}\u{1F30F}\u{1F30E}\u{1F409}\u2600\u{1F4BB}\u{1F5A5}\u{1F4BE}\u{1F4BF}\u{1F602}\u2764\u{1F60D}\u{1F923}\u{1F60A}\u{1F64F}\u{1F495}\u{1F62D}\u{1F618}\u{1F44D}\u{1F605}\u{1F44F}\u{1F601}\u{1F525}\u{1F970}\u{1F494}\u{1F496}\u{1F499}\u{1F622}\u{1F914}\u{1F606}\u{1F644}\u{1F4AA}\u{1F609}\u263A\u{1F44C}\u{1F917}\u{1F49C}\u{1F614}\u{1F60E}\u{1F607}\u{1F339}\u{1F926}\u{1F389}\u{1F49E}\u270C\u2728\u{1F937}\u{1F631}\u{1F60C}\u{1F338}\u{1F64C}\u{1F60B}\u{1F497}\u{1F49A}\u{1F60F}\u{1F49B}\u{1F642}\u{1F493}\u{1F929}\u{1F604}\u{1F600}\u{1F5A4}\u{1F603}\u{1F4AF}\u{1F648}\u{1F447}\u{1F3B6}\u{1F612}\u{1F92D}\u2763\u{1F61C}\u{1F48B}\u{1F440}\u{1F62A}\u{1F611}\u{1F4A5}\u{1F64B}\u{1F61E}\u{1F629}\u{1F621}\u{1F92A}\u{1F44A}\u{1F973}\u{1F625}\u{1F924}\u{1F449}\u{1F483}\u{1F633}\u270B\u{1F61A}\u{1F61D}\u{1F634}\u{1F31F}\u{1F62C}\u{1F643}\u{1F340}\u{1F337}\u{1F63B}\u{1F613}\u2B50\u2705\u{1F97A}\u{1F308}\u{1F608}\u{1F918}\u{1F4A6}\u2714\u{1F623}\u{1F3C3}\u{1F490}\u2639\u{1F38A}\u{1F498}\u{1F620}\u261D\u{1F615}\u{1F33A}\u{1F382}\u{1F33B}\u{1F610}\u{1F595}\u{1F49D}\u{1F64A}\u{1F639}\u{1F5E3}\u{1F4AB}\u{1F480}\u{1F451}\u{1F3B5}\u{1F91E}\u{1F61B}\u{1F534}\u{1F624}\u{1F33C}\u{1F62B}\u26BD\u{1F919}\u2615\u{1F3C6}\u{1F92B}\u{1F448}\u{1F62E}\u{1F646}\u{1F37B}\u{1F343}\u{1F436}\u{1F481}\u{1F632}\u{1F33F}\u{1F9E1}\u{1F381}\u26A1\u{1F31E}\u{1F388}\u274C\u270A\u{1F44B}\u{1F630}\u{1F928}\u{1F636}\u{1F91D}\u{1F6B6}\u{1F4B0}\u{1F353}\u{1F4A2}\u{1F91F}\u{1F641}\u{1F6A8}\u{1F4A8}\u{1F92C}\u2708\u{1F380}\u{1F37A}\u{1F913}\u{1F619}\u{1F49F}\u{1F331}\u{1F616}\u{1F476}\u{1F974}\u25B6\u27A1\u2753\u{1F48E}\u{1F4B8}\u2B07\u{1F628}\u{1F31A}\u{1F98B}\u{1F637}\u{1F57A}\u26A0\u{1F645}\u{1F61F}\u{1F635}\u{1F44E}\u{1F932}\u{1F920}\u{1F927}\u{1F4CC}\u{1F535}\u{1F485}\u{1F9D0}\u{1F43E}\u{1F352}\u{1F617}\u{1F911}\u{1F30A}\u{1F92F}\u{1F437}\u260E\u{1F4A7}\u{1F62F}\u{1F486}\u{1F446}\u{1F3A4}\u{1F647}\u{1F351}\u2744\u{1F334}\u{1F4A3}\u{1F438}\u{1F48C}\u{1F4CD}\u{1F940}\u{1F922}\u{1F445}\u{1F4A1}\u{1F4A9}\u{1F450}\u{1F4F8}\u{1F47B}\u{1F910}\u{1F92E}\u{1F3BC}\u{1F975}\u{1F6A9}\u{1F34E}\u{1F34A}\u{1F47C}\u{1F48D}\u{1F4E3}\u{1F942}"),Ad=kc.reduce((e,t,r)=>(e[r]=t,e),[]),Cd=kc.reduce((e,t,r)=>(e[t.codePointAt(0)]=r,e),[]);function Id(e){return e.reduce((t,r)=>(t+=Ad[r],t),"")}function Td(e){let t=[];for(let r of e){let n=Cd[r.codePointAt(0)];if(n===void 0)throw new Error(`Non-base256emoji character: ${r}`);t.push(n)}return new Uint8Array(t)}var _d=kr({prefix:"\u{1F680}",name:"base256emoji",encode:Id,decode:Td});var io={};Lt(io,{base32:()=>Ur,base32hex:()=>Dd,base32hexpad:()=>kd,base32hexpadupper:()=>Ud,base32hexupper:()=>Pd,base32pad:()=>Rd,base32padupper:()=>Nd,base32upper:()=>Ld,base32z:()=>Kd});var Ur=St({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),Ld=St({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),Rd=St({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),Nd=St({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),Dd=St({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),Pd=St({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),kd=St({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),Ud=St({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),Kd=St({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var so={};Lt(so,{base36:()=>Od,base36upper:()=>Md});var Od=We({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),Md=We({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var oo={};Lt(oo,{base58btc:()=>zt,base58flickr:()=>Vd});var zt=We({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),Vd=We({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var ao={};Lt(ao,{base64:()=>Ai,base64pad:()=>Fd,base64url:()=>Hd,base64urlpad:()=>qd});var Ai=St({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),Fd=St({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),Hd=St({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),qd=St({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var co={};Lt(co,{base8:()=>zd});var zd=St({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var fo={};Lt(fo,{identity:()=>Gd});var Gd=kr({prefix:"\0",name:"identity",encode:e=>Nc(e),decode:e=>Rc(e)});var gm=new TextEncoder,mm=new TextDecoder;var ho={};Lt(ho,{identity:()=>$e});var $d=Oc,Uc=128,Zd=127,Xd=~Zd,Qd=Math.pow(2,31);function Oc(e,t,r){t=t||[],r=r||0;for(var n=r;e>=Qd;)t[r++]=e&255|Uc,e/=128;for(;e&Xd;)t[r++]=e&255|Uc,e>>>=7;return t[r]=e|0,Oc.bytes=r-n+1,t}var Jd=uo,jd=128,Kc=127;function uo(e,n){var r=0,n=n||0,i=0,s=n,o,a=e.length;do{if(s>=a)throw uo.bytes=0,new RangeError("Could not decode varint");o=e[s++],r+=i<28?(o&Kc)<=jd);return uo.bytes=s-n,r}var ty=Math.pow(2,7),ey=Math.pow(2,14),ry=Math.pow(2,21),ny=Math.pow(2,28),iy=Math.pow(2,35),sy=Math.pow(2,42),oy=Math.pow(2,49),ay=Math.pow(2,56),cy=Math.pow(2,63),fy=function(e){return e[yn.decode(e,t),yn.decode.bytes],Kr=(e,t,r=0)=>(yn.encode(e,t,r),t),Or=e=>yn.encodingLength(e);var me=(e,t)=>{let r=t.byteLength,n=Or(e),i=n+Or(r),s=new Uint8Array(i+r);return Kr(e,s,0),Kr(r,s,n),s.set(t,i),new Mr(e,r,t,s)},gn=e=>{let t=De(e),[r,n]=xn(t),[i,s]=xn(t.subarray(n)),o=t.subarray(n+s);if(o.byteLength!==i)throw new Error("Incorrect length");return new Mr(r,i,o,t)},Mc=(e,t)=>{if(e===t)return!0;{let r=t;return e.code===r.code&&e.size===r.size&&r.bytes instanceof Uint8Array&&Lc(e.bytes,r.bytes)}},Mr=class{constructor(t,r,n,i){this.code=t,this.size=r,this.digest=n,this.bytes=i}};var Vc=0,ly="identity",Fc=De,py=e=>me(Vc,Fc(e)),$e={code:Vc,name:ly,encode:Fc,digest:py};var yo={};Lt(yo,{sha256:()=>Ot,sha512:()=>dy});var po=({name:e,code:t,encode:r})=>new lo(e,t,r),lo=class{constructor(t,r,n){this.name=t,this.code=r,this.encode=n}digest(t){if(t instanceof Uint8Array){let r=this.encode(t);return r instanceof Uint8Array?me(this.code,r):r.then(n=>me(this.code,n))}else throw Error("Unknown type, must be binary type")}};var qc=e=>async t=>new Uint8Array(await crypto.subtle.digest(e,t)),Ot=po({name:"sha2-256",code:18,encode:qc("SHA-256")}),dy=po({name:"sha2-512",code:19,encode:qc("SHA-512")});var zc=(e,t)=>{let{bytes:r,version:n}=e;switch(n){case 0:return xy(r,xo(e),t||zt.encoder);default:return gy(r,xo(e),t||Ur.encoder)}};var Gc=new WeakMap,xo=e=>{let t=Gc.get(e);if(t==null){let r=new Map;return Gc.set(e,r),r}return t},cr=class e{constructor(t,r,n,i){this.code=r,this.version=t,this.multihash=n,this.bytes=i,this["/"]=i}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:t,multihash:r}=this;if(t!==mn)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(r.code!==my)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return e.createV0(r)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:t,digest:r}=this.multihash,n=me(t,r);return e.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(t){return e.equals(this,t)}static equals(t,r){let n=r;return n&&t.code===n.code&&t.version===n.version&&Mc(t.multihash,n.multihash)}toString(t){return zc(this,t)}toJSON(){return{"/":zc(this)}}link(){return this}get[Symbol.toStringTag](){return"CID"}[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(t){if(t==null)return null;let r=t;if(r instanceof e)return r;if(r["/"]!=null&&r["/"]===r.bytes||r.asCID===r){let{version:n,code:i,multihash:s,bytes:o}=r;return new e(n,i,s,o||Yc(n,i,s.bytes))}else if(r[by]===!0){let{version:n,multihash:i,code:s}=r,o=gn(i);return e.create(n,s,o)}else return null}static create(t,r,n){if(typeof r!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(t){case 0:{if(r!==mn)throw new Error(`Version 0 CID must use dag-pb (code: ${mn}) block encoding`);return new e(t,r,n,n.bytes)}case 1:{let i=Yc(t,r,n.bytes);return new e(t,r,n,i)}default:throw new Error("Invalid version")}}static createV0(t){return e.create(0,mn,t)}static createV1(t,r){return e.create(1,t,r)}static decode(t){let[r,n]=e.decodeFirst(t);if(n.length)throw new Error("Incorrect length");return r}static decodeFirst(t){let r=e.inspectBytes(t),n=r.size-r.multihashSize,i=De(t.subarray(n,n+r.multihashSize));if(i.byteLength!==r.multihashSize)throw new Error("Incorrect length");let s=i.subarray(r.multihashSize-r.digestSize),o=new Mr(r.multihashCode,r.digestSize,s,i);return[r.version===0?e.createV0(o):e.createV1(r.codec,o),t.subarray(r.size)]}static inspectBytes(t){let r=0,n=()=>{let[h,l]=xn(t.subarray(r));return r+=l,h},i=n(),s=mn;if(i===18?(i=0,r=0):s=n(),i!==0&&i!==1)throw new RangeError(`Invalid CID version ${i}`);let o=r,a=n(),c=n(),f=r+c,u=f-o;return{version:i,codec:s,multihashCode:a,digestSize:c,multihashSize:u,size:f}}static parse(t,r){let[n,i]=yy(t,r),s=e.decode(i);if(s.version===0&&t[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return xo(s).set(n,t),s}},yy=(e,t)=>{switch(e[0]){case"Q":{let r=t||zt;return[zt.prefix,r.decode(`${zt.prefix}${e}`)]}case zt.prefix:{let r=t||zt;return[zt.prefix,r.decode(e)]}case Ur.prefix:{let r=t||Ur;return[Ur.prefix,r.decode(e)]}default:{if(t==null)throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");return[e[0],t.decode(e)]}}},xy=(e,t,r)=>{let{prefix:n}=r;if(n!==zt.prefix)throw Error(`Cannot string encode V0 in ${r.name} encoding`);let i=t.get(n);if(i==null){let s=r.encode(e).slice(1);return t.set(n,s),s}else return i},gy=(e,t,r)=>{let{prefix:n}=r,i=t.get(n);if(i==null){let s=r.encode(e);return t.set(n,s),s}else return i},mn=112,my=18,Yc=(e,t,r)=>{let n=Or(e),i=n+Or(t),s=new Uint8Array(i+r.byteLength);return Kr(e,s,0),Kr(t,s,n),s.set(r,i),s},by=Symbol.for("@ipld/js-cid/CID");var Fr={...fo,...ro,...co,...to,...eo,...io,...so,...oo,...ao,...no},Pm={...yo,...ho};function $c(e,t,r,n){return{name:e,prefix:t,encoder:{name:e,prefix:t,encode:r},decoder:{decode:n}}}var Wc=$c("utf8","u",e=>"u"+new TextDecoder("utf8").decode(e),e=>new TextEncoder().encode(e.substring(1))),go=$c("ascii","a",e=>{let t="a";for(let r=0;r{e=e.substring(1);let t=Bt(e.length);for(let r=0;rdr,Ed25519PublicKey:()=>En,generateKeyPair:()=>Ny,generateKeyPairFromSeed:()=>lf,unmarshalEd25519PrivateKey:()=>Ly,unmarshalEd25519PublicKey:()=>Ry});var zm=Gt(Ct(),1),Gm=Gt(wi(),1),Zc=Gt(ht(),1);function Et(e,t="utf8"){let r=Ii[t];if(r==null)throw new Error(`Unsupported encoding "${t}"`);return(t==="utf8"||t==="utf-8")&&globalThis.Buffer!=null&&globalThis.Buffer.from!=null?globalThis.Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString("utf8"):r.encoder.encode(e).substring(1)}function fe(e,t){let r=Uint8Array.from(e.abs().toByteArray());if(r=r[0]===0?r.subarray(1):r,t!=null){if(r.length>t)throw new Error("byte array longer than desired length");r=Zt([new Uint8Array(t-r.length),r])}return Et(r,"base64url")}function Qt(e){let t=Xc(e);return new Zc.default.jsbn.BigInteger(Et(t,"base16"),16)}function Xc(e,t){let r=It(e,"base64urlpad");if(t!=null){if(r.length>t)throw new Error("byte array longer than desired length");r=Zt([new Uint8Array(t-r.length),r])}return r}function ee(e){return e==null?!1:typeof e.then=="function"&&typeof e.catch=="function"&&typeof e.finally=="function"}var Hr=32,Pe=64,Ti=32;function Qc(){let e=Ir.utils.randomPrivateKey(),t=Ir.getPublicKey(e);return{privateKey:ef(e,t),publicKey:t}}function Jc(e){if(e.length!==Ti)throw new TypeError('"seed" must be 32 bytes in length.');if(!(e instanceof Uint8Array))throw new TypeError('"seed" must be a node.js Buffer, or Uint8Array.');let t=e,r=Ir.getPublicKey(t);return{privateKey:ef(t,r),publicKey:r}}function jc(e,t){let r=e.subarray(0,Ti);return Ir.sign(t instanceof Uint8Array?t:t.subarray(),r)}function tf(e,t,r){return Ir.verify(t,r instanceof Uint8Array?r:r.subarray(),e)}function ef(e,t){let r=new Uint8Array(Pe);for(let n=0;n>>31>0){let r=~this.lo+1>>>0,n=~this.hi>>>0;return r===0&&(n=n+1>>>0),-(r+n*4294967296)}return this.lo+this.hi*4294967296}toBigInt(t=!1){if(t)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){let r=~this.lo+1>>>0,n=~this.hi>>>0;return r===0&&(n=n+1>>>0),-(BigInt(r)+(BigInt(n)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toString(t=!1){return this.toBigInt(t).toString()}zzEncode(){let t=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^t)>>>0,this.lo=(this.lo<<1^t)>>>0,this}zzDecode(){let t=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^t)>>>0,this.hi=(this.hi>>>1^t)>>>0,this}length(){let t=this.lo,r=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return n===0?r===0?t<16384?t<128?1:2:t<2097152?3:4:r<16384?r<128?5:6:r<2097152?7:8:n<128?9:10}static fromBigInt(t){if(t===0n)return fr;if(tSy)return this.fromNumber(Number(t));let r=t<0n;r&&(t=-t);let n=t>>32n,i=t-(n<<32n);return r&&(n=~n|0n,i=~i|0n,++i>cf&&(i=0n,++n>cf&&(n=0n))),new e(Number(i),Number(n))}static fromNumber(t){if(t===0)return fr;let r=t<0;r&&(t=-t);let n=t>>>0,i=(t-n)/4294967296>>>0;return r&&(i=~i>>>0,n=~n>>>0,++n>4294967295&&(n=0,++i>4294967295&&(i=0))),new e(n,i)}static from(t){return typeof t=="number"?e.fromNumber(t):typeof t=="bigint"?e.fromBigInt(t):typeof t=="string"?e.fromBigInt(BigInt(t)):t.low!=null||t.high!=null?new e(t.low>>>0,t.high>>>0):fr}},fr=new $t(0,0);fr.toBigInt=function(){return 0n};fr.zzEncode=fr.zzDecode=function(){return this};fr.length=function(){return 1};var cf=4294967296n;function ff(e){let t=0,r=0;for(let n=0;n191&&a<224?s[o++]=(a&31)<<6|e[t++]&63:a>239&&a<365?(a=((a&7)<<18|(e[t++]&63)<<12|(e[t++]&63)<<6|e[t++]&63)-65536,s[o++]=55296+(a>>10),s[o++]=56320+(a&1023)):s[o++]=(a&15)<<12|(e[t++]&63)<<6|e[t++]&63,o>8191&&((i??(i=[])).push(String.fromCharCode.apply(String,s)),o=0);return i!=null?(o>0&&i.push(String.fromCharCode.apply(String,s.slice(0,o))),i.join("")):String.fromCharCode.apply(String,s.slice(0,o))}function Eo(e,t,r){let n=r,i,s;for(let o=0;o>6|192,t[r++]=i&63|128):(i&64512)===55296&&((s=e.charCodeAt(o+1))&64512)===56320?(i=65536+((i&1023)<<10)+(s&1023),++o,t[r++]=i>>18|240,t[r++]=i>>12&63|128,t[r++]=i>>6&63|128,t[r++]=i&63|128):(t[r++]=i>>12|224,t[r++]=i>>6&63|128,t[r++]=i&63|128);return r-n}function ue(e,t){return RangeError(`index out of range: ${e.pos} + ${t??1} > ${e.len}`)}function _i(e,t){return(e[t-4]|e[t-3]<<8|e[t-2]<<16|e[t-1]<<24)>>>0}var So=class{buf;pos;len;_slice=Uint8Array.prototype.subarray;constructor(t){this.buf=t,this.pos=0,this.len=t.length}uint32(){let t=4294967295;if(t=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(t=(t|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(t=(t|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(t=(t|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(t=(t|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return t;if((this.pos+=5)>this.len)throw this.pos=this.len,ue(this,10);return t}int32(){return this.uint32()|0}sint32(){let t=this.uint32();return t>>>1^-(t&1)|0}bool(){return this.uint32()!==0}fixed32(){if(this.pos+4>this.len)throw ue(this,4);return _i(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw ue(this,4);return _i(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw ue(this,4);let t=sf(this.buf,this.pos);return this.pos+=4,t}double(){if(this.pos+8>this.len)throw ue(this,4);let t=af(this.buf,this.pos);return this.pos+=8,t}bytes(){let t=this.uint32(),r=this.pos,n=this.pos+t;if(n>this.len)throw ue(this,t);return this.pos+=t,r===n?new Uint8Array(0):this.buf.subarray(r,n)}string(){let t=this.bytes();return uf(t,0,t.length)}skip(t){if(typeof t=="number"){if(this.pos+t>this.len)throw ue(this,t);this.pos+=t}else do if(this.pos>=this.len)throw ue(this);while(this.buf[this.pos++]&128);return this}skipType(t){switch(t){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(t=this.uint32()&7)!==4;)this.skipType(t);break;case 5:this.skip(4);break;default:throw Error(`invalid wire type ${t} at offset ${this.pos}`)}return this}readLongVarint(){let t=new $t(0,0),r=0;if(this.len-this.pos>4){for(;r<4;++r)if(t.lo=(t.lo|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return t;if(t.lo=(t.lo|(this.buf[this.pos]&127)<<28)>>>0,t.hi=(t.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return t;r=0}else{for(;r<3;++r){if(this.pos>=this.len)throw ue(this);if(t.lo=(t.lo|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return t}return t.lo=(t.lo|(this.buf[this.pos++]&127)<>>0,t}if(this.len-this.pos>4){for(;r<5;++r)if(t.hi=(t.hi|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return t}else for(;r<5;++r){if(this.pos>=this.len)throw ue(this);if(t.hi=(t.hi|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return t}throw Error("invalid varint encoding")}readFixed64(){if(this.pos+8>this.len)throw ue(this,8);let t=_i(this.buf,this.pos+=4),r=_i(this.buf,this.pos+=4);return new $t(t,r)}int64(){return this.readLongVarint().toBigInt()}int64Number(){return this.readLongVarint().toNumber()}int64String(){return this.readLongVarint().toString()}uint64(){return this.readLongVarint().toBigInt(!0)}uint64Number(){return this.readLongVarint().toNumber(!0)}uint64String(){return this.readLongVarint().toString(!0)}sint64(){return this.readLongVarint().zzDecode().toBigInt()}sint64Number(){return this.readLongVarint().zzDecode().toNumber()}sint64String(){return this.readLongVarint().zzDecode().toString()}fixed64(){return this.readFixed64().toBigInt()}fixed64Number(){return this.readFixed64().toNumber()}fixed64String(){return this.readFixed64().toString()}sfixed64(){return this.readFixed64().toBigInt()}sfixed64Number(){return this.readFixed64().toNumber()}sfixed64String(){return this.readFixed64().toString()}};function Bo(e){return new So(e instanceof Uint8Array?e:e.subarray())}function ur(e,t){let r=Bo(e);return t.decode(r)}function Ao(e){let t=e??8192,r=t>>>1,n,i=t;return function(o){if(o<1||o>r)return Bt(o);i+o>t&&(n=Bt(t),i=0);let a=n.subarray(i,i+=o);return i&7&&(i=(i|7)+1),a}}var hr=class{fn;len;next;val;constructor(t,r,n){this.fn=t,this.len=r,this.next=void 0,this.val=n}};function Co(){}var To=class{head;tail;len;next;constructor(t){this.head=t.head,this.tail=t.tail,this.len=t.len,this.next=t.states}},By=Ao();function Ay(e){return globalThis.Buffer!=null?Bt(e):By(e)}var wn=class{len;head;tail;states;constructor(){this.len=0,this.head=new hr(Co,0,0),this.tail=this.head,this.states=null}_push(t,r,n){return this.tail=this.tail.next=new hr(t,r,n),this.len+=r,this}uint32(t){return this.len+=(this.tail=this.tail.next=new _o((t=t>>>0)<128?1:t<16384?2:t<2097152?3:t<268435456?4:5,t)).len,this}int32(t){return t<0?this._push(bn,10,$t.fromNumber(t)):this.uint32(t)}sint32(t){return this.uint32((t<<1^t>>31)>>>0)}uint64(t){let r=$t.fromBigInt(t);return this._push(bn,r.length(),r)}uint64Number(t){let r=$t.fromNumber(t);return this._push(bn,r.length(),r)}uint64String(t){return this.uint64(BigInt(t))}int64(t){return this.uint64(t)}int64Number(t){return this.uint64Number(t)}int64String(t){return this.uint64String(t)}sint64(t){let r=$t.fromBigInt(t).zzEncode();return this._push(bn,r.length(),r)}sint64Number(t){let r=$t.fromNumber(t).zzEncode();return this._push(bn,r.length(),r)}sint64String(t){return this.sint64(BigInt(t))}bool(t){return this._push(Io,1,t?1:0)}fixed32(t){return this._push(vn,4,t>>>0)}sfixed32(t){return this.fixed32(t)}fixed64(t){let r=$t.fromBigInt(t);return this._push(vn,4,r.lo)._push(vn,4,r.hi)}fixed64Number(t){let r=$t.fromNumber(t);return this._push(vn,4,r.lo)._push(vn,4,r.hi)}fixed64String(t){return this.fixed64(BigInt(t))}sfixed64(t){return this.fixed64(t)}sfixed64Number(t){return this.fixed64Number(t)}sfixed64String(t){return this.fixed64String(t)}float(t){return this._push(nf,4,t)}double(t){return this._push(of,8,t)}bytes(t){let r=t.length>>>0;return r===0?this._push(Io,1,0):this.uint32(r)._push(Iy,r,t)}string(t){let r=ff(t);return r!==0?this.uint32(r)._push(Eo,r,t):this._push(Io,1,0)}fork(){return this.states=new To(this),this.head=this.tail=new hr(Co,0,0),this.len=0,this}reset(){return this.states!=null?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new hr(Co,0,0),this.len=0),this}ldelim(){let t=this.head,r=this.tail,n=this.len;return this.reset().uint32(n),n!==0&&(this.tail.next=t.next,this.tail=r,this.len+=n),this}finish(){let t=this.head.next,r=Ay(this.len),n=0;for(;t!=null;)t.fn(t.val,r,n),n+=t.len,t=t.next;return r}};function Io(e,t,r){t[r]=e&255}function Cy(e,t,r){for(;e>127;)t[r++]=e&127|128,e>>>=7;t[r]=e}var _o=class extends hr{next;constructor(t,r){super(Cy,t,r),this.next=void 0}};function bn(e,t,r){for(;e.hi!==0;)t[r++]=e.lo&127|128,e.lo=(e.lo>>>7|e.hi<<25)>>>0,e.hi>>>=7;for(;e.lo>127;)t[r++]=e.lo&127|128,e.lo=e.lo>>>7;t[r++]=e.lo}function vn(e,t,r){t[r]=e&255,t[r+1]=e>>>8&255,t[r+2]=e>>>16&255,t[r+3]=e>>>24}function Iy(e,t,r){t.set(e,r)}globalThis.Buffer!=null&&(wn.prototype.bytes=function(e){let t=e.length>>>0;return this.uint32(t),t>0&&this._push(Ty,t,e),this},wn.prototype.string=function(e){let t=globalThis.Buffer.byteLength(e);return this.uint32(t),t>0&&this._push(_y,t,e),this});function Ty(e,t,r){t.set(e,r)}function _y(e,t,r){e.length<40?Eo(e,t,r):t.utf8Write!=null?t.utf8Write(e,r):t.set(It(e),r)}function Lo(){return new wn}function lr(e,t){let r=Lo();return t.encode(e,r,{lengthDelimited:!1}),r.finish()}var zr;(function(e){e[e.VARINT=0]="VARINT",e[e.BIT64=1]="BIT64",e[e.LENGTH_DELIMITED=2]="LENGTH_DELIMITED",e[e.START_GROUP=3]="START_GROUP",e[e.END_GROUP=4]="END_GROUP",e[e.BIT32=5]="BIT32"})(zr||(zr={}));function Li(e,t,r,n){return{name:e,type:t,encode:r,decode:n}}function Ro(e){function t(i){if(e[i.toString()]==null)throw new Error("Invalid enum value");return e[i]}let r=function(s,o){let a=t(s);o.int32(a)},n=function(s){let o=s.int32();return t(o)};return Li("enum",zr.VARINT,r,n)}function pr(e,t){return Li("message",zr.LENGTH_DELIMITED,e,t)}var wt;(function(e){e.RSA="RSA",e.Ed25519="Ed25519",e.Secp256k1="Secp256k1"})(wt||(wt={}));var No;(function(e){e[e.RSA=0]="RSA",e[e.Ed25519=1]="Ed25519",e[e.Secp256k1=2]="Secp256k1"})(No||(No={}));(function(e){e.codec=()=>Ro(No)})(wt||(wt={}));var be;(function(e){let t;e.codec=()=>(t==null&&(t=pr((r,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),r.Type!=null&&(n.uint32(8),wt.codec().encode(r.Type,n)),r.Data!=null&&(n.uint32(18),n.bytes(r.Data)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={},s=n==null?r.len:r.pos+n;for(;r.pos>>3){case 1:i.Type=wt.codec().decode(r);break;case 2:i.Data=r.bytes();break;default:r.skipType(o&7);break}}return i})),t),e.encode=r=>lr(r,e.codec()),e.decode=r=>ur(r,e.codec())})(be||(be={}));var ve;(function(e){let t;e.codec=()=>(t==null&&(t=pr((r,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),r.Type!=null&&(n.uint32(8),wt.codec().encode(r.Type,n)),r.Data!=null&&(n.uint32(18),n.bytes(r.Data)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={},s=n==null?r.len:r.pos+n;for(;r.pos>>3){case 1:i.Type=wt.codec().decode(r);break;case 2:i.Data=r.bytes();break;default:r.skipType(o&7);break}}return i})),t),e.encode=r=>lr(r,e.codec()),e.decode=r=>ur(r,e.codec())})(ve||(ve={}));var En=class{_key;constructor(t){this._key=Gr(t,Hr)}verify(t,r){return tf(this._key,r,t)}marshal(){return this._key}get bytes(){return be.encode({Type:wt.Ed25519,Data:this.marshal()}).subarray()}equals(t){return Rt(this.bytes,t.bytes)}hash(){let t=Ot.digest(this.bytes);return ee(t)?t.then(({bytes:r})=>r):t.bytes}},dr=class{_key;_publicKey;constructor(t,r){this._key=Gr(t,Pe),this._publicKey=Gr(r,Hr)}sign(t){return jc(this._key,t)}get public(){return new En(this._publicKey)}marshal(){return this._key}get bytes(){return ve.encode({Type:wt.Ed25519,Data:this.marshal()}).subarray()}equals(t){return Rt(this.bytes,t.bytes)}async hash(){let t=Ot.digest(this.bytes),r;return ee(t)?{bytes:r}=await t:r=t.bytes,r}async id(){let t=$e.digest(this.public.bytes);return zt.encode(t.bytes).substring(1)}async export(t,r="libp2p-key"){if(r==="libp2p-key")return qr(this.bytes,t);throw new it(`export format '${r}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function Ly(e){if(e.length>Pe){e=Gr(e,Pe+Hr);let n=e.subarray(0,Pe),i=e.subarray(Pe,e.length);return new dr(n,i)}e=Gr(e,Pe);let t=e.subarray(0,Pe),r=e.subarray(Hr);return new dr(t,r)}function Ry(e){return e=Gr(e,Hr),new En(e)}async function Ny(){let{privateKey:e,publicKey:t}=Qc();return new dr(e,t)}async function lf(e){let{privateKey:t,publicKey:r}=Jc(e);return new dr(t,r)}function Gr(e,t){if(e=Uint8Array.from(e??[]),e.length!==t)throw new it(`Key must be a Uint8Array of length ${t}, got ${e.length}`,"ERR_INVALID_KEY_TYPE");return e}var Dy={"P-256":256,"P-384":384,"P-521":521},Py=Object.keys(Dy),Yb=Py.join(" / ");var Oo={};Lt(Oo,{MAX_KEY_SIZE:()=>Cn,RsaPrivateKey:()=>Yr,RsaPublicKey:()=>An,fromJwk:()=>Gy,generateKeyPair:()=>Yy,unmarshalRsaPrivateKey:()=>qy,unmarshalRsaPublicKey:()=>zy});var Bn=Gt(ht(),1);var Lv=Gt(gf(),1);function Ni(e){if(isNaN(e)||e<=0)throw new it("random bytes length must be a Number bigger than 0","ERR_INVALID_LENGTH");return je(e)}var lv=Gt(Bi(),1),Uo=Gt(ht(),1);function mf(e,t){return t.map(r=>Qt(e[r]))}function bf(e){return Uo.default.pki.setRsaPrivateKey(...mf(e,["n","e","d","p","q","dp","dq","qi"]))}function vf(e){return Uo.default.pki.setRsaPublicKey(...mf(e,["n","e"]))}var xr={};Lt(xr,{jwkToPkcs1:()=>Oy,jwkToPkix:()=>Vy,pkcs1ToJwk:()=>Ky,pkixToJwk:()=>My});var yv=Gt(ln(),1),xv=Gt(Bi(),1);var ke=Gt(ht(),1);function Ky(e){let t=ke.default.asn1.fromDer(Et(e,"ascii")),r=ke.default.pki.privateKeyFromAsn1(t);return{kty:"RSA",n:fe(r.n),e:fe(r.e),d:fe(r.d),p:fe(r.p),q:fe(r.q),dp:fe(r.dP),dq:fe(r.dQ),qi:fe(r.qInv),alg:"RS256"}}function Oy(e){if(e.n==null||e.e==null||e.d==null||e.p==null||e.q==null||e.dp==null||e.dq==null||e.qi==null)throw new it("JWK was missing components","ERR_INVALID_PARAMETERS");let t=ke.default.pki.privateKeyToAsn1({n:Qt(e.n),e:Qt(e.e),d:Qt(e.d),p:Qt(e.p),q:Qt(e.q),dP:Qt(e.dp),dQ:Qt(e.dq),qInv:Qt(e.qi)});return It(ke.default.asn1.toDer(t).getBytes(),"ascii")}function My(e){let t=ke.default.asn1.fromDer(Et(e,"ascii")),r=ke.default.pki.publicKeyFromAsn1(t);return{kty:"RSA",n:fe(r.n),e:fe(r.e)}}function Vy(e){if(e.n==null||e.e==null)throw new it("JWK was missing components","ERR_INVALID_PARAMETERS");let t=ke.default.pki.publicKeyToAsn1({n:Qt(e.n),e:Qt(e.e)});return It(ke.default.asn1.toDer(t).getBytes(),"ascii")}async function wf(e){let t=await Wt.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:e,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),r=await Bf(t);return{privateKey:r[0],publicKey:r[1]}}async function Ko(e){let r=[await Wt.get().subtle.importKey("jwk",e,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["sign"]),await Fy(e)],n=await Bf({privateKey:r[0],publicKey:r[1]});return{privateKey:n[0],publicKey:n[1]}}async function Ef(e,t){let r=await Wt.get().subtle.importKey("jwk",e,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await Wt.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},r,t instanceof Uint8Array?t:t.subarray());return new Uint8Array(n,0,n.byteLength)}async function Sf(e,t,r){let n=await Wt.get().subtle.importKey("jwk",e,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return Wt.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,t,r instanceof Uint8Array?r:r.subarray())}async function Bf(e){if(e.privateKey==null||e.publicKey==null)throw new it("Private and public key are required","ERR_INVALID_PARAMETERS");return Promise.all([Wt.get().subtle.exportKey("jwk",e.privateKey),Wt.get().subtle.exportKey("jwk",e.publicKey)])}async function Fy(e){return Wt.get().subtle.importKey("jwk",{kty:e.kty,n:e.n,e:e.e},{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["verify"])}function Af(e,t,r,n){let i=t?vf(e):bf(e),s=Et(r instanceof Uint8Array?r:r.subarray(),"ascii"),o=n(s,i);return It(o,"ascii")}function Cf(e,t){return Af(e,!0,t,(r,n)=>n.encrypt(r))}function If(e,t){return Af(e,!1,t,(r,n)=>n.decrypt(r))}function Di(e){if(e.kty!=="RSA")throw new it("invalid key type","ERR_INVALID_KEY_TYPE");if(e.n==null)throw new it("invalid key modulus","ERR_INVALID_KEY_MODULUS");return It(e.n,"base64url").length*8}var Cn=8192,An=class{_key;constructor(t){this._key=t}verify(t,r){return Sf(this._key,r,t)}marshal(){return xr.jwkToPkix(this._key)}get bytes(){return be.encode({Type:wt.RSA,Data:this.marshal()}).subarray()}encrypt(t){return Cf(this._key,t)}equals(t){return Rt(this.bytes,t.bytes)}hash(){let t=Ot.digest(this.bytes);return ee(t)?t.then(({bytes:r})=>r):t.bytes}},Yr=class{_key;_publicKey;constructor(t,r){this._key=t,this._publicKey=r}genSecret(){return Ni(16)}sign(t){return Ef(this._key,t)}get public(){if(this._publicKey==null)throw new it("public key not provided","ERR_PUBKEY_NOT_PROVIDED");return new An(this._publicKey)}decrypt(t){return If(this._key,t)}marshal(){return xr.jwkToPkcs1(this._key)}get bytes(){return ve.encode({Type:wt.RSA,Data:this.marshal()}).subarray()}equals(t){return Rt(this.bytes,t.bytes)}hash(){let t=Ot.digest(this.bytes);return ee(t)?t.then(({bytes:r})=>r):t.bytes}async id(){let t=await this.public.hash();return Et(t,"base58btc")}async export(t,r="pkcs-8"){if(r==="pkcs-8"){let n=new Bn.default.util.ByteBuffer(this.marshal()),i=Bn.default.asn1.fromDer(n),s=Bn.default.pki.privateKeyFromAsn1(i),o={algorithm:"aes256",count:1e4,saltSize:128/8,prfAlgorithm:"sha512"};return Bn.default.pki.encryptRsaPrivateKey(s,t,o)}else{if(r==="libp2p-key")return qr(this.bytes,t);throw new it(`export format '${r}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}}};async function qy(e){let t=xr.pkcs1ToJwk(e);if(Di(t)>Cn)throw new it("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let r=await Ko(t);return new Yr(r.privateKey,r.publicKey)}function zy(e){let t=xr.pkixToJwk(e);if(Di(t)>Cn)throw new it("key size is too large","ERR_KEY_SIZE_TOO_LARGE");return new An(t)}async function Gy(e){if(Di(e)>Cn)throw new it("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let t=await Ko(e);return new Yr(t.privateKey,t.publicKey)}async function Yy(e){if(e>Cn)throw new it("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let t=await wf(e);return new Yr(t.privateKey,t.publicKey)}var Ho={};Lt(Ho,{Secp256k1PrivateKey:()=>Tn,Secp256k1PublicKey:()=>In,generateKeyPair:()=>i1,unmarshalSecp256k1PrivateKey:()=>r1,unmarshalSecp256k1PublicKey:()=>n1});function Wy(e){let t=en(e);Jt(t,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});let{endo:r,Fp:n,a:i}=t;if(r){if(!n.eql(i,n.ZERO))throw new Error("Endomorphism can only be defined for Koblitz curves that have a=0");if(typeof r!="object"||typeof r.beta!="bigint"||typeof r.splitScalar!="function")throw new Error("Expected endomorphism with beta: bigint and splitScalar: function")}return Object.freeze({...t})}var{bytesToNumberBE:$y,hexToBytes:Zy}=jn,gr={Err:class extends Error{constructor(t=""){super(t)}},_parseInt(e){let{Err:t}=gr;if(e.length<2||e[0]!==2)throw new t("Invalid signature integer tag");let r=e[1],n=e.subarray(2,r+2);if(!r||n.length!==r)throw new t("Invalid signature integer: wrong length");if(n[0]&128)throw new t("Invalid signature integer: negative");if(n[0]===0&&!(n[1]&128))throw new t("Invalid signature integer: unnecessary leading zero");return{d:$y(n),l:e.subarray(r+2)}},toSig(e){let{Err:t}=gr,r=typeof e=="string"?Zy(e):e;if(!(r instanceof Uint8Array))throw new Error("ui8a expected");let n=r.length;if(n<2||r[0]!=48)throw new t("Invalid signature tag");if(r[1]!==n-2)throw new t("Invalid signature: incorrect length");let{d:i,l:s}=gr._parseInt(r.subarray(2)),{d:o,l:a}=gr._parseInt(s);if(a.length)throw new t("Invalid signature: left bytes after parsing");return{r:i,s:o}},hexFromSig(e){let t=f=>Number.parseInt(f[0],16)&8?"00"+f:f,r=f=>{let u=f.toString(16);return u.length&1?`0${u}`:u},n=t(r(e.s)),i=t(r(e.r)),s=n.length/2,o=i.length/2,a=r(s),c=r(o);return`30${r(o+s+4)}02${c}${i}02${a}${n}`}},Ue=BigInt(0),re=BigInt(1),Kv=BigInt(2),Tf=BigInt(3),Ov=BigInt(4);function Xy(e){let t=Wy(e),{Fp:r}=t,n=t.toBytes||((p,d,y)=>{let g=d.toAffine();return Te(Uint8Array.from([4]),r.toBytes(g.x),r.toBytes(g.y))}),i=t.fromBytes||(p=>{let d=p.subarray(1),y=r.fromBytes(d.subarray(0,r.BYTES)),g=r.fromBytes(d.subarray(r.BYTES,2*r.BYTES));return{x:y,y:g}});function s(p){let{a:d,b:y}=t,g=r.sqr(p),v=r.mul(g,p);return r.add(r.add(v,r.mul(p,d)),y)}if(!r.eql(r.sqr(t.Gy),s(t.Gx)))throw new Error("bad generator point: equation left != right");function o(p){return typeof p=="bigint"&&Uer.eql(m,r.ZERO);return v(y)&&v(g)?h.ZERO:new h(y,g,r.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(d){let y=r.invertBatch(d.map(g=>g.pz));return d.map((g,v)=>g.toAffine(y[v])).map(h.fromAffine)}static fromHex(d){let y=h.fromAffine(i(yt("pointHex",d)));return y.assertValidity(),y}static fromPrivateKey(d){return h.BASE.multiply(c(d))}_setWindowSize(d){this._WINDOW_SIZE=d,f.delete(this)}assertValidity(){if(this.is0()){if(t.allowInfinityPoint&&!r.is0(this.py))return;throw new Error("bad point: ZERO")}let{x:d,y}=this.toAffine();if(!r.isValid(d)||!r.isValid(y))throw new Error("bad point: x or y not FE");let g=r.sqr(y),v=s(d);if(!r.eql(g,v))throw new Error("bad point: equation left != right");if(!this.isTorsionFree())throw new Error("bad point: not in prime-order subgroup")}hasEvenY(){let{y:d}=this.toAffine();if(r.isOdd)return!r.isOdd(d);throw new Error("Field doesn't support isOdd")}equals(d){u(d);let{px:y,py:g,pz:v}=this,{px:m,py:C,pz:S}=d,B=r.eql(r.mul(y,S),r.mul(m,v)),R=r.eql(r.mul(g,S),r.mul(C,v));return B&&R}negate(){return new h(this.px,r.neg(this.py),this.pz)}double(){let{a:d,b:y}=t,g=r.mul(y,Tf),{px:v,py:m,pz:C}=this,S=r.ZERO,B=r.ZERO,R=r.ZERO,L=r.mul(v,v),O=r.mul(m,m),M=r.mul(C,C),U=r.mul(v,m);return U=r.add(U,U),R=r.mul(v,C),R=r.add(R,R),S=r.mul(d,R),B=r.mul(g,M),B=r.add(S,B),S=r.sub(O,B),B=r.add(O,B),B=r.mul(S,B),S=r.mul(U,S),R=r.mul(g,R),M=r.mul(d,M),U=r.sub(L,M),U=r.mul(d,U),U=r.add(U,R),R=r.add(L,L),L=r.add(R,L),L=r.add(L,M),L=r.mul(L,U),B=r.add(B,L),M=r.mul(m,C),M=r.add(M,M),L=r.mul(M,U),S=r.sub(S,L),R=r.mul(M,O),R=r.add(R,R),R=r.add(R,R),new h(S,B,R)}add(d){u(d);let{px:y,py:g,pz:v}=this,{px:m,py:C,pz:S}=d,B=r.ZERO,R=r.ZERO,L=r.ZERO,O=t.a,M=r.mul(t.b,Tf),U=r.mul(y,m),q=r.mul(g,C),z=r.mul(v,S),Z=r.add(y,g),A=r.add(m,C);Z=r.mul(Z,A),A=r.add(U,q),Z=r.sub(Z,A),A=r.add(y,v);let N=r.add(m,S);return A=r.mul(A,N),N=r.add(U,z),A=r.sub(A,N),N=r.add(g,v),B=r.add(C,S),N=r.mul(N,B),B=r.add(q,z),N=r.sub(N,B),L=r.mul(O,A),B=r.mul(M,z),L=r.add(B,L),B=r.sub(q,L),L=r.add(q,L),R=r.mul(B,L),q=r.add(U,U),q=r.add(q,U),z=r.mul(O,z),A=r.mul(M,A),q=r.add(q,z),z=r.sub(U,z),z=r.mul(O,z),A=r.add(A,z),U=r.mul(q,A),R=r.add(R,U),U=r.mul(N,A),B=r.mul(Z,B),B=r.sub(B,U),U=r.mul(Z,q),L=r.mul(N,L),L=r.add(L,U),new h(B,R,L)}subtract(d){return this.add(d.negate())}is0(){return this.equals(h.ZERO)}wNAF(d){return x.wNAFCached(this,f,d,y=>{let g=r.invertBatch(y.map(v=>v.pz));return y.map((v,m)=>v.toAffine(g[m])).map(h.fromAffine)})}multiplyUnsafe(d){let y=h.ZERO;if(d===Ue)return y;if(a(d),d===re)return this;let{endo:g}=t;if(!g)return x.unsafeLadder(this,d);let{k1neg:v,k1:m,k2neg:C,k2:S}=g.splitScalar(d),B=y,R=y,L=this;for(;m>Ue||S>Ue;)m&re&&(B=B.add(L)),S&re&&(R=R.add(L)),L=L.double(),m>>=re,S>>=re;return v&&(B=B.negate()),C&&(R=R.negate()),R=new h(r.mul(R.px,g.beta),R.py,R.pz),B.add(R)}multiply(d){a(d);let y=d,g,v,{endo:m}=t;if(m){let{k1neg:C,k1:S,k2neg:B,k2:R}=m.splitScalar(y),{p:L,f:O}=this.wNAF(S),{p:M,f:U}=this.wNAF(R);L=x.constTimeNegate(C,L),M=x.constTimeNegate(B,M),M=new h(r.mul(M.px,m.beta),M.py,M.pz),g=L.add(M),v=O.add(U)}else{let{p:C,f:S}=this.wNAF(y);g=C,v=S}return h.normalizeZ([g,v])[0]}multiplyAndAddUnsafe(d,y,g){let v=h.BASE,m=(S,B)=>B===Ue||B===re||!S.equals(v)?S.multiplyUnsafe(B):S.multiply(B),C=m(this,y).add(m(d,g));return C.is0()?void 0:C}toAffine(d){let{px:y,py:g,pz:v}=this,m=this.is0();d==null&&(d=m?r.ONE:r.inv(v));let C=r.mul(y,d),S=r.mul(g,d),B=r.mul(v,d);if(m)return{x:r.ZERO,y:r.ZERO};if(!r.eql(B,r.ONE))throw new Error("invZ was invalid");return{x:C,y:S}}isTorsionFree(){let{h:d,isTorsionFree:y}=t;if(d===re)return!0;if(y)return y(h,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:d,clearCofactor:y}=t;return d===re?this:y?y(h,this):this.multiplyUnsafe(t.h)}toRawBytes(d=!0){return this.assertValidity(),n(h,this,d)}toHex(d=!0){return Ae(this.toRawBytes(d))}}h.BASE=new h(t.Gx,t.Gy,r.ONE),h.ZERO=new h(r.ZERO,r.ONE,r.ZERO);let l=t.nBitLength,x=ri(h,t.endo?Math.ceil(l/2):l);return{CURVE:t,ProjectivePoint:h,normPrivateKeyToScalar:c,weierstrassEquation:s,isWithinCurveOrder:o}}function Qy(e){let t=en(e);return Jt(t,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...t})}function _f(e){let t=Qy(e),{Fp:r,n}=t,i=r.BYTES+1,s=2*r.BYTES+1;function o(A){return UeAe(Ve(A,t.nByteLength));function p(A){let N=n>>re;return A>N}function d(A){return p(A)?a(-A):A}let y=(A,N,T)=>Ce(A.slice(N,T));class g{constructor(N,T,_){this.r=N,this.s=T,this.recovery=_,this.assertValidity()}static fromCompact(N){let T=t.nByteLength;return N=yt("compactSignature",N,T*2),new g(y(N,0,T),y(N,T,2*T))}static fromDER(N){let{r:T,s:_}=gr.toSig(yt("DER",N));return new g(T,_)}assertValidity(){if(!l(this.r))throw new Error("r must be 0 < r < CURVE.n");if(!l(this.s))throw new Error("s must be 0 < s < CURVE.n")}addRecoveryBit(N){return new g(this.r,this.s,N)}recoverPublicKey(N){let{r:T,s:_,recovery:w}=this,k=R(yt("msgHash",N));if(w==null||![0,1,2,3].includes(w))throw new Error("recovery id invalid");let K=w===2||w===3?T+t.n:T;if(K>=r.ORDER)throw new Error("recovery id 2 or 3 invalid");let F=w&1?"03":"02",W=f.fromHex(F+x(K)),$=c(K),et=a(-k*$),X=a(_*$),J=f.BASE.multiplyAndAddUnsafe(W,et,X);if(!J)throw new Error("point at infinify");return J.assertValidity(),J}hasHighS(){return p(this.s)}normalizeS(){return this.hasHighS()?new g(this.r,a(-this.s),this.recovery):this}toDERRawBytes(){return tr(this.toDERHex())}toDERHex(){return gr.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return tr(this.toCompactHex())}toCompactHex(){return x(this.r)+x(this.s)}}let v={isValidPrivateKey(A){try{return u(A),!0}catch{return!1}},normPrivateKeyToScalar:u,randomPrivateKey:()=>{let A=bs(t.n);return qa(t.randomBytes(A),t.n)},precompute(A=8,N=f.BASE){return N._setWindowSize(A),N.multiply(BigInt(3)),N}};function m(A,N=!0){return f.fromPrivateKey(A).toRawBytes(N)}function C(A){let N=A instanceof Uint8Array,T=typeof A=="string",_=(N||T)&&A.length;return N?_===i||_===s:T?_===2*i||_===2*s:A instanceof f}function S(A,N,T=!0){if(C(A))throw new Error("first arg must be private key");if(!C(N))throw new Error("second arg must be public key");return f.fromHex(N).multiply(u(A)).toRawBytes(T)}let B=t.bits2int||function(A){let N=Ce(A),T=A.length*8-t.nBitLength;return T>0?N>>BigInt(T):N},R=t.bits2int_modN||function(A){return a(B(A))},L=tn(t.nBitLength);function O(A){if(typeof A!="bigint")throw new Error("bigint expected");if(!(Ue<=A&&Aut in T))throw new Error("sign() legacy options not supported");let{hash:_,randomBytes:w}=t,{lowS:k,prehash:K,extraEntropy:F}=T;k==null&&(k=!0),A=yt("msgHash",A),K&&(A=yt("prehashed msgHash",_(A)));let W=R(A),$=u(N),et=[O($),O(W)];if(F!=null){let ut=F===!0?w(r.BYTES):F;et.push(yt("extraEntropy",ut))}let X=Te(...et),J=W;function lt(ut){let kt=B(ut);if(!l(kt))return;let Ut=c(kt),Tt=f.BASE.multiply(kt).toAffine(),Mt=a(Tt.x);if(Mt===Ue)return;let we=a(Ut*a(J+Mt*$));if(we===Ue)return;let Xe=(Tt.x===Mt?0:2)|Number(Tt.y&re),Xr=we;return k&&p(we)&&(Xr=d(we),Xe^=1),new g(Mt,Xr,Xe)}return{seed:X,k2sig:lt}}let U={lowS:t.lowS,prehash:!1},q={lowS:t.lowS,prehash:!1};function z(A,N,T=U){let{seed:_,k2sig:w}=M(A,N,T),k=t;return ds(k.hash.outputLen,k.nByteLength,k.hmac)(_,w)}f.BASE._setWindowSize(8);function Z(A,N,T,_=q){let w=A;if(N=yt("msgHash",N),T=yt("publicKey",T),"strict"in _)throw new Error("options.strict was renamed to lowS");let{lowS:k,prehash:K}=_,F,W;try{if(typeof w=="string"||w instanceof Uint8Array)try{F=g.fromDER(w)}catch(Tt){if(!(Tt instanceof gr.Err))throw Tt;F=g.fromCompact(w)}else if(typeof w=="object"&&typeof w.r=="bigint"&&typeof w.s=="bigint"){let{r:Tt,s:Mt}=w;F=new g(Tt,Mt)}else throw new Error("PARSE");W=f.fromHex(T)}catch(Tt){if(Tt.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(k&&F.hasHighS())return!1;K&&(N=t.hash(N));let{r:$,s:et}=F,X=R(N),J=c(et),lt=a(X*J),ut=a($*J),kt=f.BASE.multiplyAndAddUnsafe(W,lt,ut)?.toAffine();return kt?a(kt.x)===$:!1}return{CURVE:t,getPublicKey:m,getSharedSecret:S,sign:z,verify:Z,ProjectivePoint:f,Signature:g,utils:v}}function Jy(e){return{hash:e,hmac:(t,...r)=>Tr(e,t,$n(...r)),randomBytes:je}}function Lf(e,t){let r=n=>_f({...e,...Jy(n)});return Object.freeze({...r(t),create:r})}var Df=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),Rf=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),jy=BigInt(1),Mo=BigInt(2),Nf=(e,t)=>(e+t/Mo)/t;function t1(e){let t=Df,r=BigInt(3),n=BigInt(6),i=BigInt(11),s=BigInt(22),o=BigInt(23),a=BigInt(44),c=BigInt(88),f=e*e*e%t,u=f*f*e%t,h=xt(u,r,t)*u%t,l=xt(h,r,t)*u%t,x=xt(l,Mo,t)*f%t,p=xt(x,i,t)*x%t,d=xt(p,s,t)*p%t,y=xt(d,a,t)*d%t,g=xt(y,c,t)*y%t,v=xt(g,a,t)*d%t,m=xt(v,r,t)*u%t,C=xt(m,o,t)*p%t,S=xt(C,n,t)*f%t,B=xt(S,Mo,t);if(!Vo.eql(Vo.sqr(B),e))throw new Error("Cannot find square root");return B}var Vo=ei(Df,void 0,void 0,{sqrt:t1}),he=Lf({a:BigInt(0),b:BigInt(7),Fp:Vo,n:Rf,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:e=>{let t=Rf,r=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-jy*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),i=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),s=r,o=BigInt("0x100000000000000000000000000000000"),a=Nf(s*e,t),c=Nf(-n*e,t),f=at(e-a*r-c*i,t),u=at(-a*n-c*s,t),h=f>o,l=u>o;if(h&&(f=t-f),l&&(u=t-u),f>o||u>o)throw new Error("splitScalar: Endomorphism failed, k="+e);return{k1neg:h,k1:f,k2neg:l,k2:u}}}},_r),Wv=BigInt(0);var $v=he.ProjectivePoint;function Pf(){return he.utils.randomPrivateKey()}function kf(e,t){let r=Ot.digest(t instanceof Uint8Array?t:t.subarray());if(ee(r))return r.then(({digest:n})=>he.sign(n,e).toDERRawBytes()).catch(n=>{throw new it(String(n),"ERR_INVALID_INPUT")});try{return he.sign(r.digest,e).toDERRawBytes()}catch(n){throw new it(String(n),"ERR_INVALID_INPUT")}}function Uf(e,t,r){let n=Ot.digest(r instanceof Uint8Array?r:r.subarray());if(ee(n))return n.then(({digest:i})=>he.verify(t,i,e)).catch(i=>{throw new it(String(i),"ERR_INVALID_INPUT")});try{return he.verify(t,n.digest,e)}catch(i){throw new it(String(i),"ERR_INVALID_INPUT")}}function Kf(e){return he.ProjectivePoint.fromHex(e).toRawBytes(!0)}function Of(e){try{he.getPublicKey(e,!0)}catch(t){throw new it(String(t),"ERR_INVALID_PRIVATE_KEY")}}function Fo(e){try{he.ProjectivePoint.fromHex(e)}catch(t){throw new it(String(t),"ERR_INVALID_PUBLIC_KEY")}}function Mf(e){try{return he.getPublicKey(e,!0)}catch(t){throw new it(String(t),"ERR_INVALID_PRIVATE_KEY")}}var In=class{_key;constructor(t){Fo(t),this._key=t}verify(t,r){return Uf(this._key,r,t)}marshal(){return Kf(this._key)}get bytes(){return be.encode({Type:wt.Secp256k1,Data:this.marshal()}).subarray()}equals(t){return Rt(this.bytes,t.bytes)}async hash(){let t=Ot.digest(this.bytes),r;return ee(t)?{bytes:r}=await t:r=t.bytes,r}},Tn=class{_key;_publicKey;constructor(t,r){this._key=t,this._publicKey=r??Mf(t),Of(this._key),Fo(this._publicKey)}sign(t){return kf(this._key,t)}get public(){return new In(this._publicKey)}marshal(){return this._key}get bytes(){return ve.encode({Type:wt.Secp256k1,Data:this.marshal()}).subarray()}equals(t){return Rt(this.bytes,t.bytes)}hash(){let t=Ot.digest(this.bytes);return ee(t)?t.then(({bytes:r})=>r):t.bytes}async id(){let t=await this.public.hash();return Et(t,"base58btc")}async export(t,r="libp2p-key"){if(r==="libp2p-key")return qr(this.bytes,t);throw new it(`export format '${r}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function r1(e){return new Tn(e)}function n1(e){return new In(e)}async function i1(){let e=Pf();return new Tn(e)}var mr={rsa:Oo,ed25519:Do,secp256k1:Ho};function Vf(e){let t=Object.keys(mr).join(" / ");return new it(`invalid or unsupported key type ${e}. Must be ${t}`,"ERR_UNSUPPORTED_KEY_TYPE")}function Ff(e){let t=be.decode(e),r=t.Data??new Uint8Array;switch(t.Type){case wt.RSA:return mr.rsa.unmarshalRsaPublicKey(r);case wt.Ed25519:return mr.ed25519.unmarshalEd25519PublicKey(r);case wt.Secp256k1:return mr.secp256k1.unmarshalSecp256k1PublicKey(r);default:throw Vf(t.Type??"unknown")}}async function Hf(e){let t=ve.decode(e),r=t.Data??new Uint8Array;switch(t.Type){case wt.RSA:return mr.rsa.unmarshalRsaPrivateKey(r);case wt.Ed25519:return mr.ed25519.unmarshalEd25519PrivateKey(r);case wt.Secp256k1:return mr.secp256k1.unmarshalSecp256k1PrivateKey(r);default:throw Vf(t.Type??"RSA")}}var o1=Symbol.for("nodejs.util.inspect.custom"),qf=Object.values(Fr).map(e=>e.decoder).reduce((e,t)=>e.or(t),Fr.identity.decoder),zf=114,qo=36,zo=37,_n=class{type;multihash;privateKey;publicKey;string;constructor(t){this.type=t.type,this.multihash=t.multihash,this.privateKey=t.privateKey,Object.defineProperty(this,"string",{enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return`PeerId(${this.toString()})`}[Cc]=!0;toString(){return this.string==null&&(this.string=zt.encode(this.multihash.bytes).slice(1)),this.string}toCID(){return cr.createV1(zf,this.multihash)}toBytes(){return this.multihash.bytes}toJSON(){return this.toString()}equals(t){if(t instanceof Uint8Array)return Rt(this.multihash.bytes,t);if(typeof t=="string")return a1(t).equals(this);if(t?.multihash?.bytes!=null)return Rt(this.multihash.bytes,t.multihash.bytes);throw new Error("not valid Id")}[o1](){return`PeerId(${this.toString()})`}},Wr=class extends _n{type="RSA";publicKey;constructor(t){super({...t,type:"RSA"}),this.publicKey=t.publicKey}},$r=class extends _n{type="Ed25519";publicKey;constructor(t){super({...t,type:"Ed25519"}),this.publicKey=t.multihash.digest}},Zr=class extends _n{type="secp256k1";publicKey;constructor(t){super({...t,type:"secp256k1"}),this.publicKey=t.multihash.digest}};function a1(e,t){if(t=t??qf,e.charAt(0)==="1"||e.charAt(0)==="Q"){let r=gn(zt.decode(`z${e}`));return e.startsWith("12D")?new $r({multihash:r}):e.startsWith("16U")?new Zr({multihash:r}):new Wr({multihash:r})}return c1(qf.decode(e))}function c1(e){try{let t=gn(e);if(t.code===$e.code){if(t.digest.length===qo)return new $r({multihash:t});if(t.digest.length===zo)return new Zr({multihash:t})}if(t.code===Ot.code)return new Wr({multihash:t})}catch{return f1(cr.decode(e))}throw new Error("Supplied PeerID CID is invalid")}function f1(e){if(e==null||e.multihash==null||e.version==null||e.version===1&&e.code!==zf)throw new Error("Supplied PeerID CID is invalid");let t=e.multihash;if(t.code===Ot.code)return new Wr({multihash:e.multihash});if(t.code===$e.code){if(t.digest.length===qo)return new $r({multihash:e.multihash});if(t.digest.length===zo)return new Zr({multihash:e.multihash})}throw new Error("Supplied PeerID CID is invalid")}async function Go(e,t){return e.length===qo?new $r({multihash:me($e.code,e),privateKey:t}):e.length===zo?new Zr({multihash:me($e.code,e),privateKey:t}):new Wr({multihash:await Ot.digest(e),publicKey:e,privateKey:t})}var Pi;(function(e){let t;e.codec=()=>(t==null&&(t=pr((r,n,i={})=>{if(i.lengthDelimited!==!1&&n.fork(),r.webtransportCerthashes!=null)for(let s of r.webtransportCerthashes)n.uint32(10),n.bytes(s);i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={webtransportCerthashes:[]},s=n==null?r.len:r.pos+n;for(;r.pos>>3){case 1:{i.webtransportCerthashes.push(r.bytes());break}default:{r.skipType(o&7);break}}}return i})),t),e.encode=r=>lr(r,e.codec()),e.decode=r=>ur(r,e.codec())})(Pi||(Pi={}));var Ln;(function(e){let t;e.codec=()=>(t==null&&(t=pr((r,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),r.identityKey!=null&&r.identityKey.byteLength>0&&(n.uint32(10),n.bytes(r.identityKey)),r.identitySig!=null&&r.identitySig.byteLength>0&&(n.uint32(18),n.bytes(r.identitySig)),r.extensions!=null&&(n.uint32(34),Pi.codec().encode(r.extensions,n)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={identityKey:rt(0),identitySig:rt(0)},s=n==null?r.len:r.pos+n;for(;r.pos>>3){case 1:{i.identityKey=r.bytes();break}case 2:{i.identitySig=r.bytes();break}case 4:{i.extensions=Pi.codec().decode(r,r.uint32());break}default:{r.skipType(o&7);break}}}return i})),t),e.encode=r=>lr(r,e.codec()),e.decode=r=>ur(r,e.codec())})(Ln||(Ln={}));async function Gf(e,t,r){let n=await h1(e,Yf(t));if(e.publicKey==null)throw new Error("PublicKey was missing from local PeerId");return u1(e.publicKey,n,r)}function u1(e,t,r){return Ln.encode({identityKey:e,identitySig:t,extensions:r??{webtransportCerthashes:[]}}).subarray()}async function h1(e,t){if(e.privateKey==null)throw new Error("PrivateKey was missing from PeerId");return(await Hf(e.privateKey)).sign(t)}async function Yo(e){return Go(e.identityKey)}function Wo(e){return Ln.decode(e)}function Yf(e){let t=It("noise-libp2p-static-key:");return e instanceof Uint8Array?Zt([t,e],t.length+e.length):(e.prepend(t),e)}async function $o(e,t,r){let n=await Go(t.identityKey);if(!n.equals(r))throw new Error(`Payload identity key ${n.toString()} does not match expected remote peer ${r.toString()}`);let i=Yf(e);if(n.publicKey==null)throw new Error("PublicKey was missing from PeerId");if(t.identitySig==null)throw new Error("Signature was missing from message");if(!await Ff(n.publicKey).verify(i,t.identitySig))throw new Error("Static key doesn't match to peer that signed payload!");return n}function Rn(e){return!(!(e instanceof Uint8Array)&&!br(e)||e.byteLength!==32)}var l1=0,p1=4294967295,d1="Cipherstate has reached maximum n, a new handshake must be performed",ki=class{n;bytes;view;constructor(t=l1){this.n=t,this.bytes=rt(12),this.view=new DataView(this.bytes.buffer,this.bytes.byteOffset,this.bytes.byteLength),this.view.setUint32(4,t,!0)}increment(){this.n++,this.view.setUint32(4,this.n,!0)}getBytes(){return this.bytes}getUint64(){return this.n}assertValue(){if(this.n>p1)throw new Error(d1)}};var Ui=class{crypto;log;constructor(t,r){this.log=t.logger.forComponent("libp2p:noise:abstract-handshake"),this.crypto=r}encryptWithAd(t,r,n){let i=this.encrypt(t.k,t.n,r,n);return t.n.increment(),i}decryptWithAd(t,r,n,i){let{plaintext:s,valid:o}=this.decrypt(t.k,t.n,r,n,i);return o&&t.n.increment(),{plaintext:s,valid:o}}hasKey(t){return!this.isEmptyKey(t.k)}createEmptyKey(){return rt(32)}isEmptyKey(t){let r=this.createEmptyKey();return Rt(r,t)}encrypt(t,r,n,i){return r.assertValue(),this.crypto.chaCha20Poly1305Encrypt(i,r.getBytes(),n,t)}encryptAndHash(t,r){let n;return this.hasKey(t.cs)?n=this.encryptWithAd(t.cs,t.h,r):n=r,this.mixHash(t,n),n}decrypt(t,r,n,i,s){r.assertValue();let o=this.crypto.chaCha20Poly1305Decrypt(i,r.getBytes(),n,t,s);return o?{plaintext:o,valid:!0}:{plaintext:rt(0),valid:!1}}decryptAndHash(t,r){let n,i=!0;return this.hasKey(t.cs)?{plaintext:n,valid:i}=this.decryptWithAd(t.cs,t.h,r):n=r,this.mixHash(t,r),{plaintext:n,valid:i}}dh(t,r){try{let n=this.crypto.generateX25519SharedKey(t,r);return n.length===32?n:n.subarray(0,32)}catch(n){let i=n;return this.log.error("error deriving shared key",i),rt(32)}}mixHash(t,r){t.h=this.getHash(t.h,r)}getHash(t,r){return this.crypto.hashSHA256(new At(t,r))}mixKey(t,r){let[n,i]=this.crypto.getHKDF(t.ck,r);t.cs=this.initializeKey(i),t.ck=n}initializeKey(t){return{k:t,n:new ki}}initializeSymmetric(t){let r=It(t,"utf-8"),n=this.hashProtocolName(r),i=n,s=this.createEmptyKey();return{cs:this.initializeKey(s),ck:i,h:n}}hashProtocolName(t){if(t.length<=32){let r=rt(32);return r.set(t),r}else return this.getHash(t,rt(0))}split(t){let[r,n]=this.crypto.getHKDF(t.ck,rt(0)),i=this.initializeKey(r),s=this.initializeKey(n);return{cs1:i,cs2:s}}writeMessageRegular(t,r){let n=this.encryptWithAd(t,rt(0),r),i=this.createEmptyKey(),s=rt(0);return{ne:i,ns:s,ciphertext:n}}readMessageRegular(t,r){return this.decryptWithAd(t,rt(0),r.ciphertext)}};var Ki=class extends Ui{initializeInitiator(t,r,n,i){let s="Noise_XX_25519_ChaChaPoly_SHA256",o=this.initializeSymmetric(s);this.mixHash(o,t);let a=rt(32);return{ss:o,s:r,rs:n,psk:i,re:a}}initializeResponder(t,r,n,i){let s="Noise_XX_25519_ChaChaPoly_SHA256",o=this.initializeSymmetric(s);this.mixHash(o,t);let a=rt(32);return{ss:o,s:r,rs:n,psk:i,re:a}}writeMessageA(t,r,n){let i=rt(0);n!==void 0?t.e=n:t.e=this.crypto.generateX25519KeyPair();let s=t.e.publicKey;this.mixHash(t.ss,s);let o=this.encryptAndHash(t.ss,r);return{ne:s,ns:i,ciphertext:o}}writeMessageB(t,r){t.e=this.crypto.generateX25519KeyPair();let n=t.e.publicKey;this.mixHash(t.ss,n),this.mixKey(t.ss,this.dh(t.e.privateKey,t.re));let i=t.s.publicKey,s=this.encryptAndHash(t.ss,i);this.mixKey(t.ss,this.dh(t.s.privateKey,t.re));let o=this.encryptAndHash(t.ss,r);return{ne:n,ns:s,ciphertext:o}}writeMessageC(t,r){let n=t.s.publicKey,i=this.encryptAndHash(t.ss,n);this.mixKey(t.ss,this.dh(t.s.privateKey,t.re));let s=this.encryptAndHash(t.ss,r),a={ne:this.createEmptyKey(),ns:i,ciphertext:s},{cs1:c,cs2:f}=this.split(t.ss);return{h:t.ss.h,messageBuffer:a,cs1:c,cs2:f}}readMessageA(t,r){return Rn(r.ne)&&(t.re=r.ne),this.mixHash(t.ss,t.re),this.decryptAndHash(t.ss,r.ciphertext)}readMessageB(t,r){if(Rn(r.ne)&&(t.re=r.ne),this.mixHash(t.ss,t.re),!t.e)throw new Error("Handshake state `e` param is missing.");this.mixKey(t.ss,this.dh(t.e.privateKey,t.re));let{plaintext:n,valid:i}=this.decryptAndHash(t.ss,r.ns);i&&Rn(n)&&(t.rs=n),this.mixKey(t.ss,this.dh(t.e.privateKey,t.rs));let{plaintext:s,valid:o}=this.decryptAndHash(t.ss,r.ciphertext);return{plaintext:s,valid:i&&o}}readMessageC(t,r){let{plaintext:n,valid:i}=this.decryptAndHash(t.ss,r.ns);if(i&&Rn(n)&&(t.rs=n),!t.e)throw new Error("Handshake state `e` param is missing.");this.mixKey(t.ss,this.dh(t.e.privateKey,t.rs));let{plaintext:s,valid:o}=this.decryptAndHash(t.ss,r.ciphertext),{cs1:a,cs2:c}=this.split(t.ss);return{h:t.ss.h,plaintext:s,valid:i&&o,cs1:a,cs2:c}}initSession(t,r,n){let i=this.createEmptyKey(),s=rt(32),o;return t?o=this.initializeInitiator(r,n,s,i):o=this.initializeResponder(r,n,s,i),{hs:o,i:t,mc:0}}sendMessage(t,r,n){let i;if(t.mc===0)i=this.writeMessageA(t.hs,r,n);else if(t.mc===1)i=this.writeMessageB(t.hs,r);else if(t.mc===2){let{h:s,messageBuffer:o,cs1:a,cs2:c}=this.writeMessageC(t.hs,r);i=o,t.h=s,t.cs1=a,t.cs2=c}else if(t.mc>2)if(t.i){if(!t.cs1)throw new Error("CS1 (cipher state) is not defined");i=this.writeMessageRegular(t.cs1,r)}else{if(!t.cs2)throw new Error("CS2 (cipher state) is not defined");i=this.writeMessageRegular(t.cs2,r)}else throw new Error("Session invalid.");return t.mc++,i}recvMessage(t,r){let n=rt(0),i=!1;if(t.mc===0)({plaintext:n,valid:i}=this.readMessageA(t.hs,r));else if(t.mc===1)({plaintext:n,valid:i}=this.readMessageB(t.hs,r));else if(t.mc===2){let{h:s,plaintext:o,valid:a,cs1:c,cs2:f}=this.readMessageC(t.hs,r);n=o,i=a,t.h=s,t.cs1=c,t.cs2=f}return t.mc++,{plaintext:n,valid:i}}};function Wf(e,t){!t.enabled||!Er||(t(`LOCAL_STATIC_PUBLIC_KEY ${Et(e.publicKey,"hex")}`),t(`LOCAL_STATIC_PRIVATE_KEY ${Et(e.privateKey,"hex")}`))}function Zo(e,t){!t.enabled||!Er||(e?(t(`LOCAL_PUBLIC_EPHEMERAL_KEY ${Et(e.publicKey,"hex")}`),t(`LOCAL_PRIVATE_EPHEMERAL_KEY ${Et(e.privateKey,"hex")}`)):t("Missing local ephemeral keys."))}function $f(e,t){!t.enabled||!Er||t(`REMOTE_STATIC_PUBLIC_KEY ${Et(e.subarray(),"hex")}`)}function Xo(e,t){!t.enabled||!Er||t(`REMOTE_EPHEMERAL_PUBLIC_KEY ${Et(e.subarray(),"hex")}`)}function Zf(e,t){!t.enabled||!Er||(e.cs1&&e.cs2?(t(`CIPHER_STATE_1 ${e.cs1.n.getUint64()} ${Et(e.cs1.k,"hex")}`),t(`CIPHER_STATE_2 ${e.cs2.n.getUint64()} ${Et(e.cs2.k,"hex")}`)):t("Missing cipher state."))}var Oi=class{isInitiator;session;remotePeer;remoteExtensions={webtransportCerthashes:[]};payload;connection;xx;staticKeypair;prologue;log;constructor(t,r,n,i,s,o,a,c,f){this.log=t.logger.forComponent("libp2p:noise:xxhandshake"),this.isInitiator=r,this.payload=n,this.prologue=i,this.staticKeypair=o,this.connection=a,c&&(this.remotePeer=c),this.xx=f??new Ki(t,s),this.session=this.xx.initSession(this.isInitiator,this.prologue,this.staticKeypair)}async propose(){if(Wf(this.session.hs.s,this.log),this.isInitiator){this.log.trace("Stage 0 - Initiator starting to send first message.");let t=this.xx.sendMessage(this.session,rt(0));await this.connection.write(e0(t)),this.log.trace("Stage 0 - Initiator finished sending first message."),Zo(this.session.hs.e,this.log)}else{this.log.trace("Stage 0 - Responder waiting to receive first message...");let t=i0((await this.connection.read()).subarray()),{valid:r}=this.xx.recvMessage(this.session,t);if(!r)throw new rr("xx handshake stage 0 validation fail");this.log.trace("Stage 0 - Responder received first message."),Xo(this.session.hs.re,this.log)}}async exchange(){if(this.isInitiator){this.log.trace("Stage 1 - Initiator waiting to receive first message from responder...");let t=s0((await this.connection.read()).subarray()),{plaintext:r,valid:n}=this.xx.recvMessage(this.session,t);if(!n)throw new rr("xx handshake stage 1 validation fail");this.log.trace("Stage 1 - Initiator received the message."),Xo(this.session.hs.re,this.log),$f(this.session.hs.rs,this.log),this.log.trace("Initiator going to check remote's signature...");try{let i=Wo(r);this.remotePeer=this.remotePeer||await Yo(i),await $o(this.session.hs.rs,i,this.remotePeer),this.setRemoteNoiseExtension(i.extensions)}catch(i){let s=i;throw new cn(`Error occurred while verifying signed payload: ${s.message}`)}this.log.trace("All good with the signature!")}else{this.log.trace("Stage 1 - Responder sending out first message with signed payload and static key.");let t=this.xx.sendMessage(this.session,this.payload);await this.connection.write(r0(t)),this.log.trace("Stage 1 - Responder sent the second handshake message with signed payload."),Zo(this.session.hs.e,this.log)}}async finish(){if(this.isInitiator){this.log.trace("Stage 2 - Initiator sending third handshake message.");let t=this.xx.sendMessage(this.session,this.payload);await this.connection.write(n0(t)),this.log.trace("Stage 2 - Initiator sent message with signed payload.")}else{this.log.trace("Stage 2 - Responder waiting for third handshake message...");let t=o0((await this.connection.read()).subarray()),{plaintext:r,valid:n}=this.xx.recvMessage(this.session,t);if(!n)throw new rr("xx handshake stage 2 validation fail");this.log.trace("Stage 2 - Responder received the message, finished handshake.");try{let i=Wo(r);this.remotePeer=this.remotePeer||await Yo(i),await $o(this.session.hs.rs,i,this.remotePeer),this.setRemoteNoiseExtension(i.extensions)}catch(i){let s=i;throw new cn(`Error occurred while verifying signed payload: ${s.message}`)}}Zf(this.session,this.log)}encrypt(t,r){let n=this.getCS(r);return this.xx.encryptWithAd(n,rt(0),t)}decrypt(t,r,n){let i=this.getCS(r,!1);return this.xx.decryptWithAd(i,rt(0),t,n)}getRemoteStaticKey(){return this.session.hs.rs}getCS(t,r=!0){if(!t.cs1||!t.cs2)throw new rr("Handshake not completed properly, cipher state does not exist.");return this.isInitiator?r?t.cs1:t.cs2:r?t.cs2:t.cs1}setRemoteNoiseExtension(t){t&&(this.remoteExtensions=t)}};function Xf(e){return{xxHandshakeSuccesses:e.registerCounter("libp2p_noise_xxhandshake_successes_total",{help:"Total count of noise xxHandshakes successes_"}),xxHandshakeErrors:e.registerCounter("libp2p_noise_xxhandshake_error_total",{help:"Total count of noise xxHandshakes errors"}),encryptedPackets:e.registerCounter("libp2p_noise_encrypted_packets_total",{help:"Total count of noise encrypted packets successfully"}),decryptedPackets:e.registerCounter("libp2p_noise_decrypted_packets_total",{help:"Total count of noise decrypted packets"}),decryptErrors:e.registerCounter("libp2p_noise_decrypt_errors_total",{help:"Total count of noise decrypt errors"})}}var Mi=class{protocol="/noise";crypto;prologue;staticKeys;extensions;metrics;components;constructor(t,r={}){let{staticNoiseKey:n,extensions:i,crypto:s,prologueBytes:o}=r,{metrics:a}=t;this.components=t,this.crypto=s??t0,this.extensions=i,this.metrics=a?Xf(a):void 0,n?this.staticKeys=this.crypto.generateX25519KeyPairFromSeed(n):this.staticKeys=this.crypto.generateX25519KeyPair(),this.prologue=o??rt(0)}async secureOutbound(t,r,n){let i=Zi(r,{lengthEncoder:Lr,lengthDecoder:on,maxDataLength:65535}),s=await this.performHandshake({connection:i,isInitiator:!0,localPeer:t,remotePeer:n}),o=await this.createSecureConnection(i,s);return r.source=o.source,r.sink=o.sink,{conn:r,remoteExtensions:s.remoteExtensions,remotePeer:s.remotePeer}}async secureInbound(t,r,n){let i=Zi(r,{lengthEncoder:Lr,lengthDecoder:on,maxDataLength:65535}),s=await this.performHandshake({connection:i,isInitiator:!1,localPeer:t,remotePeer:n}),o=await this.createSecureConnection(i,s);return r.source=o.source,r.sink=o.sink,{conn:r,remotePeer:s.remotePeer,remoteExtensions:s.remoteExtensions}}async performHandshake(t){let r=await Gf(t.localPeer,this.staticKeys.publicKey,this.extensions);return this.performXXHandshake(t,r)}async performXXHandshake(t,r){let{isInitiator:n,remotePeer:i,connection:s}=t,o=new Oi(this.components,n,r,this.prologue,this.crypto,this.staticKeys,s,i);try{await o.propose(),await o.exchange(),await o.finish(),this.metrics?.xxHandshakeSuccesses.increment()}catch(a){if(this.metrics?.xxHandshakeErrors.increment(),a instanceof Error)throw a.message=`Error occurred during XX handshake: ${a.message}`,a}return o}async createSecureConnection(t,r){let[n,i]=xa(),s=t.unwrap();return await ma(n,c0(r,this.metrics),s,o=>Jr(o,{lengthDecoder:on}),f0(r,this.metrics),n),i}};function y1(e={}){return t=>new Mi(t,e)}return uu(x1);})(); +/*! Bundled license information: + +@noble/ciphers/esm/utils.js: + (*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) *) + +@noble/hashes/esm/utils.js: + (*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *) + +@noble/curves/esm/abstract/utils.js: + (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *) + +@noble/curves/esm/abstract/modular.js: + (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *) + +@noble/curves/esm/abstract/curve.js: + (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *) + +@noble/curves/esm/abstract/edwards.js: + (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *) + +@noble/curves/esm/abstract/montgomery.js: + (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *) + +@noble/curves/esm/ed25519.js: + (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *) + +@noble/curves/esm/abstract/weierstrass.js: + (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *) + +@noble/curves/esm/_shortw_utils.js: + (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *) + +@noble/curves/esm/secp256k1.js: + (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *) +*/ +return ChainsafeLibp2PNoise})); diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/basic.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/basic.d.ts new file mode 100644 index 000000000..5b8bbb19b --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/basic.d.ts @@ -0,0 +1,5 @@ +export type bytes = Uint8Array; +export type bytes32 = Uint8Array; +export type bytes16 = Uint8Array; +export type uint64 = number; +//# sourceMappingURL=basic.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/basic.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/basic.d.ts.map new file mode 100644 index 000000000..eeee2bada --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/basic.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../../../src/@types/basic.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG,UAAU,CAAA;AAC9B,MAAM,MAAM,OAAO,GAAG,UAAU,CAAA;AAChC,MAAM,MAAM,OAAO,GAAG,UAAU,CAAA;AAEhC,MAAM,MAAM,MAAM,GAAG,MAAM,CAAA"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/basic.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/basic.js new file mode 100644 index 000000000..f839d2b8c --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/basic.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=basic.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/basic.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/basic.js.map new file mode 100644 index 000000000..aa623d697 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/basic.js.map @@ -0,0 +1 @@ +{"version":3,"file":"basic.js","sourceRoot":"","sources":["../../../src/@types/basic.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake-interface.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake-interface.d.ts new file mode 100644 index 000000000..c9f3ddb33 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake-interface.d.ts @@ -0,0 +1,15 @@ +import type { NoiseSession } from './handshake.js'; +import type { NoiseExtensions } from '../proto/payload.js'; +import type { PeerId } from '@libp2p/interface'; +import type { Uint8ArrayList } from 'uint8arraylist'; +export interface IHandshake { + session: NoiseSession; + remotePeer: PeerId; + remoteExtensions: NoiseExtensions; + encrypt(plaintext: Uint8Array | Uint8ArrayList, session: NoiseSession): Uint8Array | Uint8ArrayList; + decrypt(ciphertext: Uint8Array | Uint8ArrayList, session: NoiseSession, dst?: Uint8Array): { + plaintext: Uint8Array | Uint8ArrayList; + valid: boolean; + }; +} +//# sourceMappingURL=handshake-interface.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake-interface.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake-interface.d.ts.map new file mode 100644 index 000000000..e2f649857 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake-interface.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"handshake-interface.d.ts","sourceRoot":"","sources":["../../../src/@types/handshake-interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,YAAY,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,eAAe,CAAA;IACjC,OAAO,CAAC,SAAS,EAAE,UAAU,GAAG,cAAc,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU,GAAG,cAAc,CAAA;IACnG,OAAO,CAAC,UAAU,EAAE,UAAU,GAAG,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG;QAAE,SAAS,EAAE,UAAU,GAAG,cAAc,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAA;CACtJ"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake-interface.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake-interface.js new file mode 100644 index 000000000..6cb504ea8 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake-interface.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=handshake-interface.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake-interface.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake-interface.js.map new file mode 100644 index 000000000..f59aae35f --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake-interface.js.map @@ -0,0 +1 @@ +{"version":3,"file":"handshake-interface.js","sourceRoot":"","sources":["../../../src/@types/handshake-interface.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake.d.ts new file mode 100644 index 000000000..e200280b4 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake.d.ts @@ -0,0 +1,41 @@ +import type { bytes, bytes32, uint64 } from './basic.js'; +import type { KeyPair } from './libp2p.js'; +import type { Nonce } from '../nonce.js'; +import type { Uint8ArrayList } from 'uint8arraylist'; +export type Hkdf = [bytes, bytes, bytes]; +export interface MessageBuffer { + ne: bytes32; + ns: Uint8Array | Uint8ArrayList; + ciphertext: Uint8Array | Uint8ArrayList; +} +export interface CipherState { + k: bytes32; + n: Nonce; +} +export interface SymmetricState { + cs: CipherState; + ck: bytes32; + h: bytes32; +} +export interface HandshakeState { + ss: SymmetricState; + s: KeyPair; + e?: KeyPair; + rs: Uint8Array | Uint8ArrayList; + re: bytes32; + psk: bytes32; +} +export interface NoiseSession { + hs: HandshakeState; + h?: bytes32; + cs1?: CipherState; + cs2?: CipherState; + mc: uint64; + i: boolean; +} +export interface INoisePayload { + identityKey: bytes; + identitySig: bytes; + data: bytes; +} +//# sourceMappingURL=handshake.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake.d.ts.map new file mode 100644 index 000000000..dba1124b9 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"handshake.d.ts","sourceRoot":"","sources":["../../../src/@types/handshake.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,MAAM,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;AAExC,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAA;IACX,EAAE,EAAE,UAAU,GAAG,cAAc,CAAA;IAC/B,UAAU,EAAE,UAAU,GAAG,cAAc,CAAA;CACxC;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,OAAO,CAAA;IAGV,CAAC,EAAE,KAAK,CAAA;CACT;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,WAAW,CAAA;IACf,EAAE,EAAE,OAAO,CAAA;IACX,CAAC,EAAE,OAAO,CAAA;CACX;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,cAAc,CAAA;IAClB,CAAC,EAAE,OAAO,CAAA;IACV,CAAC,CAAC,EAAE,OAAO,CAAA;IACX,EAAE,EAAE,UAAU,GAAG,cAAc,CAAA;IAC/B,EAAE,EAAE,OAAO,CAAA;IACX,GAAG,EAAE,OAAO,CAAA;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,cAAc,CAAA;IAClB,CAAC,CAAC,EAAE,OAAO,CAAA;IACX,GAAG,CAAC,EAAE,WAAW,CAAA;IACjB,GAAG,CAAC,EAAE,WAAW,CAAA;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,CAAC,EAAE,OAAO,CAAA;CACX;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,KAAK,CAAA;IAClB,WAAW,EAAE,KAAK,CAAA;IAClB,IAAI,EAAE,KAAK,CAAA;CACZ"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake.js new file mode 100644 index 000000000..39c1bf13f --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=handshake.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake.js.map new file mode 100644 index 000000000..bed86a99f --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/handshake.js.map @@ -0,0 +1 @@ +{"version":3,"file":"handshake.js","sourceRoot":"","sources":["../../../src/@types/handshake.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/libp2p.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/libp2p.d.ts new file mode 100644 index 000000000..3926559f1 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/libp2p.d.ts @@ -0,0 +1,10 @@ +import type { bytes32 } from './basic.js'; +import type { NoiseExtensions } from '../proto/payload.js'; +import type { ConnectionEncrypter } from '@libp2p/interface'; +export interface KeyPair { + publicKey: bytes32; + privateKey: bytes32; +} +export interface INoiseConnection extends ConnectionEncrypter { +} +//# sourceMappingURL=libp2p.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/libp2p.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/libp2p.d.ts.map new file mode 100644 index 000000000..91ead4c05 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/libp2p.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"libp2p.d.ts","sourceRoot":"","sources":["../../../src/@types/libp2p.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAE5D,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,gBAAiB,SAAQ,mBAAmB,CAAC,eAAe,CAAC;CAAG"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/libp2p.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/libp2p.js new file mode 100644 index 000000000..9b5e5678e --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/libp2p.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=libp2p.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/libp2p.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/libp2p.js.map new file mode 100644 index 000000000..efd4520e6 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/@types/libp2p.js.map @@ -0,0 +1 @@ +{"version":3,"file":"libp2p.js","sourceRoot":"","sources":["../../../src/@types/libp2p.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/constants.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/constants.d.ts new file mode 100644 index 000000000..576fb1857 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/constants.d.ts @@ -0,0 +1,4 @@ +export declare const NOISE_MSG_MAX_LENGTH_BYTES = 65535; +export declare const NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG: number; +export declare const DUMP_SESSION_KEYS: boolean; +//# sourceMappingURL=constants.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/constants.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/constants.d.ts.map new file mode 100644 index 000000000..8bb0fa819 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/constants.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,0BAA0B,QAAQ,CAAA;AAC/C,eAAO,MAAM,sCAAsC,QAAkC,CAAA;AAErF,eAAO,MAAM,iBAAiB,SAAsD,CAAA"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/constants.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/constants.js new file mode 100644 index 000000000..e1381b284 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/constants.js @@ -0,0 +1,4 @@ +export const NOISE_MSG_MAX_LENGTH_BYTES = 65535; +export const NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG = NOISE_MSG_MAX_LENGTH_BYTES - 16; +export const DUMP_SESSION_KEYS = Boolean(globalThis.process?.env?.DUMP_SESSION_KEYS); +//# sourceMappingURL=constants.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/constants.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/constants.js.map new file mode 100644 index 000000000..d21a05013 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/constants.js.map @@ -0,0 +1 @@ +{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAA;AAC/C,MAAM,CAAC,MAAM,sCAAsC,GAAG,0BAA0B,GAAG,EAAE,CAAA;AAErF,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAA"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto.d.ts new file mode 100644 index 000000000..f1b45e7c0 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto.d.ts @@ -0,0 +1,14 @@ +import { type Uint8ArrayList } from 'uint8arraylist'; +import type { bytes32 } from './@types/basic.js'; +import type { Hkdf } from './@types/handshake.js'; +import type { KeyPair } from './@types/libp2p.js'; +export interface ICryptoInterface { + hashSHA256(data: Uint8Array | Uint8ArrayList): Uint8Array; + getHKDF(ck: bytes32, ikm: Uint8Array): Hkdf; + generateX25519KeyPair(): KeyPair; + generateX25519KeyPairFromSeed(seed: Uint8Array): KeyPair; + generateX25519SharedKey(privateKey: Uint8Array | Uint8ArrayList, publicKey: Uint8Array | Uint8ArrayList): Uint8Array; + chaCha20Poly1305Encrypt(plaintext: Uint8Array | Uint8ArrayList, nonce: Uint8Array, ad: Uint8Array, k: bytes32): Uint8ArrayList | Uint8Array; + chaCha20Poly1305Decrypt(ciphertext: Uint8Array | Uint8ArrayList, nonce: Uint8Array, ad: Uint8Array, k: bytes32, dst?: Uint8Array): Uint8ArrayList | Uint8Array | null; +} +//# sourceMappingURL=crypto.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto.d.ts.map new file mode 100644 index 000000000..c33161787 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,CAAA;IAEzD,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAAA;IAE3C,qBAAqB,IAAI,OAAO,CAAA;IAChC,6BAA6B,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAA;IACxD,uBAAuB,CAAC,UAAU,EAAE,UAAU,GAAG,cAAc,EAAE,SAAS,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,CAAA;IAEpH,uBAAuB,CAAC,SAAS,EAAE,UAAU,GAAG,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,GAAG,cAAc,GAAG,UAAU,CAAA;IAC3I,uBAAuB,CAAC,UAAU,EAAE,UAAU,GAAG,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,GAAG,IAAI,CAAA;CACtK"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto.js new file mode 100644 index 000000000..bb3bbc1aa --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto.js @@ -0,0 +1,2 @@ +import {} from 'uint8arraylist'; +//# sourceMappingURL=crypto.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto.js.map new file mode 100644 index 000000000..d093197d9 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,MAAM,gBAAgB,CAAA"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.browser.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.browser.d.ts new file mode 100644 index 000000000..43a189404 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.browser.d.ts @@ -0,0 +1,2 @@ +export declare const defaultCrypto: import("../crypto.js").ICryptoInterface; +//# sourceMappingURL=index.browser.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.browser.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.browser.d.ts.map new file mode 100644 index 000000000..c8c08581c --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.browser.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../../../src/crypto/index.browser.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,yCAAe,CAAA"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.browser.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.browser.js new file mode 100644 index 000000000..4be4f6ef7 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.browser.js @@ -0,0 +1,3 @@ +import { pureJsCrypto } from './js.js'; +export const defaultCrypto = pureJsCrypto; +//# sourceMappingURL=index.browser.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.browser.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.browser.js.map new file mode 100644 index 000000000..ec7d52f01 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.browser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.browser.js","sourceRoot":"","sources":["../../../src/crypto/index.browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEtC,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CAAA"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.d.ts new file mode 100644 index 000000000..cf8aff630 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.d.ts @@ -0,0 +1,3 @@ +import type { ICryptoInterface } from '../crypto.js'; +export declare const defaultCrypto: ICryptoInterface; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.d.ts.map new file mode 100644 index 000000000..819dbc96f --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/crypto/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAkHpD,eAAO,MAAM,aAAa,EAAE,gBAyF3B,CAAA"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.js new file mode 100644 index 000000000..ceba87da4 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.js @@ -0,0 +1,186 @@ +import crypto from 'node:crypto'; +import { newInstance, ChaCha20Poly1305 } from '@chainsafe/as-chacha20poly1305'; +import { digest } from '@chainsafe/as-sha256'; +import { Uint8ArrayList } from 'uint8arraylist'; +import { isElectronMain } from 'wherearewe'; +import { pureJsCrypto } from './js.js'; +const ctx = newInstance(); +const asImpl = new ChaCha20Poly1305(ctx); +const CHACHA_POLY1305 = 'chacha20-poly1305'; +const PKCS8_PREFIX = Buffer.from([0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x6e, 0x04, 0x22, 0x04, 0x20]); +const X25519_PREFIX = Buffer.from([0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x6e, 0x03, 0x21, 0x00]); +const nodeCrypto = { + hashSHA256(data) { + const hash = crypto.createHash('sha256'); + if (data instanceof Uint8Array) { + return hash.update(data).digest(); + } + for (const buf of data) { + hash.update(buf); + } + return hash.digest(); + }, + chaCha20Poly1305Encrypt(plaintext, nonce, ad, k) { + const cipher = crypto.createCipheriv(CHACHA_POLY1305, k, nonce, { + authTagLength: 16 + }); + cipher.setAAD(ad, { plaintextLength: plaintext.byteLength }); + if (plaintext instanceof Uint8Array) { + const updated = cipher.update(plaintext); + const final = cipher.final(); + const tag = cipher.getAuthTag(); + return Buffer.concat([updated, tag, final], updated.byteLength + tag.byteLength + final.byteLength); + } + const output = new Uint8ArrayList(); + for (const buf of plaintext) { + output.append(cipher.update(buf)); + } + const final = cipher.final(); + if (final.byteLength > 0) { + output.append(final); + } + output.append(cipher.getAuthTag()); + return output; + }, + chaCha20Poly1305Decrypt(ciphertext, nonce, ad, k, _dst) { + const authTag = ciphertext.subarray(ciphertext.length - 16); + const decipher = crypto.createDecipheriv(CHACHA_POLY1305, k, nonce, { + authTagLength: 16 + }); + let text; + if (ciphertext instanceof Uint8Array) { + text = ciphertext.subarray(0, ciphertext.length - 16); + } + else { + text = ciphertext.sublist(0, ciphertext.length - 16); + } + decipher.setAAD(ad, { + plaintextLength: text.byteLength + }); + decipher.setAuthTag(authTag); + if (text instanceof Uint8Array) { + const output = decipher.update(text); + const final = decipher.final(); + if (final.byteLength > 0) { + return Buffer.concat([output, final], output.byteLength + final.byteLength); + } + return output; + } + const output = new Uint8ArrayList(); + for (const buf of text) { + output.append(decipher.update(buf)); + } + const final = decipher.final(); + if (final.byteLength > 0) { + output.append(final); + } + return output; + } +}; +const asCrypto = { + hashSHA256(data) { + return digest(data.subarray()); + }, + chaCha20Poly1305Encrypt(plaintext, nonce, ad, k) { + return asImpl.seal(k, nonce, plaintext.subarray(), ad); + }, + chaCha20Poly1305Decrypt(ciphertext, nonce, ad, k, dst) { + return asImpl.open(k, nonce, ciphertext.subarray(), ad, dst); + } +}; +// benchmarks show that for chacha20poly1305 +// the as implementation is faster for smaller payloads(<1200) +// and the node implementation is faster for larger payloads +export const defaultCrypto = { + ...pureJsCrypto, + hashSHA256(data) { + return nodeCrypto.hashSHA256(data); + }, + chaCha20Poly1305Encrypt(plaintext, nonce, ad, k) { + if (plaintext.byteLength < 1200) { + return asCrypto.chaCha20Poly1305Encrypt(plaintext, nonce, ad, k); + } + return nodeCrypto.chaCha20Poly1305Encrypt(plaintext, nonce, ad, k); + }, + chaCha20Poly1305Decrypt(ciphertext, nonce, ad, k, dst) { + if (ciphertext.byteLength < 1200) { + return asCrypto.chaCha20Poly1305Decrypt(ciphertext, nonce, ad, k, dst); + } + return nodeCrypto.chaCha20Poly1305Decrypt(ciphertext, nonce, ad, k, dst); + }, + generateX25519KeyPair() { + const { publicKey, privateKey } = crypto.generateKeyPairSync('x25519', { + publicKeyEncoding: { + type: 'spki', + format: 'der' + }, + privateKeyEncoding: { + type: 'pkcs8', + format: 'der' + } + }); + return { + publicKey: publicKey.subarray(X25519_PREFIX.length), + privateKey: privateKey.subarray(PKCS8_PREFIX.length) + }; + }, + generateX25519KeyPairFromSeed(seed) { + const privateKey = crypto.createPrivateKey({ + key: Buffer.concat([ + PKCS8_PREFIX, + seed + ], PKCS8_PREFIX.byteLength + seed.byteLength), + type: 'pkcs8', + format: 'der' + }); + const publicKey = crypto.createPublicKey(privateKey) + .export({ + type: 'spki', + format: 'der' + }).subarray(X25519_PREFIX.length); + return { + publicKey, + privateKey: seed + }; + }, + generateX25519SharedKey(privateKey, publicKey) { + if (publicKey instanceof Uint8Array) { + publicKey = Buffer.concat([ + X25519_PREFIX, + publicKey + ], X25519_PREFIX.byteLength + publicKey.byteLength); + } + else { + publicKey.prepend(X25519_PREFIX); + publicKey = publicKey.subarray(); + } + if (privateKey instanceof Uint8Array) { + privateKey = Buffer.concat([ + PKCS8_PREFIX, + privateKey + ], PKCS8_PREFIX.byteLength + privateKey.byteLength); + } + else { + privateKey.prepend(PKCS8_PREFIX); + privateKey = privateKey.subarray(); + } + return crypto.diffieHellman({ + publicKey: crypto.createPublicKey({ + key: Buffer.from(publicKey, publicKey.byteOffset, publicKey.byteLength), + type: 'spki', + format: 'der' + }), + privateKey: crypto.createPrivateKey({ + key: Buffer.from(privateKey, privateKey.byteOffset, privateKey.byteLength), + type: 'pkcs8', + format: 'der' + }) + }); + } +}; +// no chacha20-poly1305 in electron https://github.com/electron/electron/issues/24024 +if (isElectronMain) { + defaultCrypto.chaCha20Poly1305Encrypt = asCrypto.chaCha20Poly1305Encrypt; + defaultCrypto.chaCha20Poly1305Decrypt = asCrypto.chaCha20Poly1305Decrypt; +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.js.map new file mode 100644 index 000000000..b64808ea0 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/crypto/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/js.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/js.d.ts new file mode 100644 index 000000000..4020b8611 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/js.d.ts @@ -0,0 +1,3 @@ +import type { ICryptoInterface } from '../crypto.js'; +export declare const pureJsCrypto: ICryptoInterface; +//# sourceMappingURL=js.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/js.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/js.d.ts.map new file mode 100644 index 000000000..8a7973b5b --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/js.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"js.d.ts","sourceRoot":"","sources":["../../../src/crypto/js.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAGpD,eAAO,MAAM,YAAY,EAAE,gBA+C1B,CAAA"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/js.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/js.js new file mode 100644 index 000000000..2dba4a27f --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/js.js @@ -0,0 +1,43 @@ +import { chacha20poly1305 } from '@noble/ciphers/chacha'; +import { x25519 } from '@noble/curves/ed25519'; +import { extract, expand } from '@noble/hashes/hkdf'; +import { sha256 } from '@noble/hashes/sha256'; +export const pureJsCrypto = { + hashSHA256(data) { + return sha256(data.subarray()); + }, + getHKDF(ck, ikm) { + const prk = extract(sha256, ikm, ck); + const okmU8Array = expand(sha256, prk, undefined, 96); + const okm = okmU8Array; + const k1 = okm.subarray(0, 32); + const k2 = okm.subarray(32, 64); + const k3 = okm.subarray(64, 96); + return [k1, k2, k3]; + }, + generateX25519KeyPair() { + const secretKey = x25519.utils.randomPrivateKey(); + const publicKey = x25519.getPublicKey(secretKey); + return { + publicKey, + privateKey: secretKey + }; + }, + generateX25519KeyPairFromSeed(seed) { + const publicKey = x25519.getPublicKey(seed); + return { + publicKey, + privateKey: seed + }; + }, + generateX25519SharedKey(privateKey, publicKey) { + return x25519.getSharedSecret(privateKey.subarray(), publicKey.subarray()); + }, + chaCha20Poly1305Encrypt(plaintext, nonce, ad, k) { + return chacha20poly1305(k, nonce, ad).encrypt(plaintext.subarray()); + }, + chaCha20Poly1305Decrypt(ciphertext, nonce, ad, k, dst) { + return chacha20poly1305(k, nonce, ad).decrypt(ciphertext.subarray(), dst); + } +}; +//# sourceMappingURL=js.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/js.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/js.js.map new file mode 100644 index 000000000..274864d01 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/js.js.map @@ -0,0 +1 @@ +{"version":3,"file":"js.js","sourceRoot":"","sources":["../../../src/crypto/js.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAO7C,MAAM,CAAC,MAAM,YAAY,GAAqB;IAC5C,UAAU,CAAE,IAAiC;QAC3C,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;IAChC,CAAC;IAED,OAAO,CAAE,EAAW,EAAE,GAAe;QACnC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA;QACpC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,CAAA;QACrD,MAAM,GAAG,GAAG,UAAU,CAAA;QAEtB,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QAC9B,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAC/B,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAE/B,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;IACrB,CAAC;IAED,qBAAqB;QACnB,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAA;QACjD,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;QAEhD,OAAO;YACL,SAAS;YACT,UAAU,EAAE,SAAS;SACtB,CAAA;IACH,CAAC;IAED,6BAA6B,CAAE,IAAgB;QAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QAE3C,OAAO;YACL,SAAS;YACT,UAAU,EAAE,IAAI;SACjB,CAAA;IACH,CAAC;IAED,uBAAuB,CAAE,UAAuC,EAAE,SAAsC;QACtG,OAAO,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC5E,CAAC;IAED,uBAAuB,CAAE,SAAsC,EAAE,KAAiB,EAAE,EAAc,EAAE,CAAU;QAC5G,OAAO,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAA;IACrE,CAAC;IAED,uBAAuB,CAAE,UAAuC,EAAE,KAAiB,EAAE,EAAc,EAAE,CAAU,EAAE,GAAgB;QAC/H,OAAO,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAA;IAC3E,CAAC;CACF,CAAA"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/streaming.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/streaming.d.ts new file mode 100644 index 000000000..a6fffb234 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/streaming.d.ts @@ -0,0 +1,7 @@ +import { Uint8ArrayList } from 'uint8arraylist'; +import type { IHandshake } from '../@types/handshake-interface.js'; +import type { MetricsRegistry } from '../metrics.js'; +import type { Transform } from 'it-stream-types'; +export declare function encryptStream(handshake: IHandshake, metrics?: MetricsRegistry): Transform>; +export declare function decryptStream(handshake: IHandshake, metrics?: MetricsRegistry): Transform, AsyncGenerator>; +//# sourceMappingURL=streaming.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/streaming.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/streaming.d.ts.map new file mode 100644 index 000000000..168db4804 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/streaming.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../../../src/crypto/streaming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAI/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAKhD,wBAAgB,aAAa,CAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC,cAAc,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC,CAuBvI;AAGD,wBAAgB,aAAa,CAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC,CAkCvK"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/streaming.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/streaming.js new file mode 100644 index 000000000..1ff6be8f0 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/streaming.js @@ -0,0 +1,60 @@ +import { Uint8ArrayList } from 'uint8arraylist'; +import { allocUnsafe as uint8ArrayAllocUnsafe } from 'uint8arrays/alloc'; +import { NOISE_MSG_MAX_LENGTH_BYTES, NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG } from '../constants.js'; +import { uint16BEEncode } from '../encoder.js'; +const CHACHA_TAG_LENGTH = 16; +// Returns generator that encrypts payload from the user +export function encryptStream(handshake, metrics) { + return async function* (source) { + for await (const chunk of source) { + for (let i = 0; i < chunk.length; i += NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG) { + let end = i + NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG; + if (end > chunk.length) { + end = chunk.length; + } + let data; + if (chunk instanceof Uint8Array) { + data = handshake.encrypt(chunk.subarray(i, end), handshake.session); + } + else { + data = handshake.encrypt(chunk.sublist(i, end), handshake.session); + } + metrics?.encryptedPackets.increment(); + yield new Uint8ArrayList(uint16BEEncode(data.byteLength), data); + } + } + }; +} +// Decrypt received payload to the user +export function decryptStream(handshake, metrics) { + return async function* (source) { + for await (const chunk of source) { + for (let i = 0; i < chunk.length; i += NOISE_MSG_MAX_LENGTH_BYTES) { + let end = i + NOISE_MSG_MAX_LENGTH_BYTES; + if (end > chunk.length) { + end = chunk.length; + } + if (end - CHACHA_TAG_LENGTH < i) { + throw new Error('Invalid chunk'); + } + const encrypted = chunk.sublist(i, end); + let dst; + // @ts-expect-error .bufs is private + if (encrypted.bufs.length === 1) { + dst = chunk.subarray(i, end - CHACHA_TAG_LENGTH); + } + else { + dst = uint8ArrayAllocUnsafe(end - CHACHA_TAG_LENGTH - i); + } + const { plaintext: decrypted, valid } = handshake.decrypt(encrypted, handshake.session, dst); + if (!valid) { + metrics?.decryptErrors.increment(); + throw new Error('Failed to validate decrypted chunk'); + } + metrics?.decryptedPackets.increment(); + yield decrypted; + } + } + }; +} +//# sourceMappingURL=streaming.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/streaming.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/streaming.js.map new file mode 100644 index 000000000..517dbbb29 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/crypto/streaming.js.map @@ -0,0 +1 @@ +{"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../../src/crypto/streaming.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/encoder.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/encoder.d.ts new file mode 100644 index 000000000..a24ce9256 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/encoder.d.ts @@ -0,0 +1,16 @@ +import { Uint8ArrayList } from 'uint8arraylist'; +import type { bytes } from './@types/basic.js'; +import type { MessageBuffer } from './@types/handshake.js'; +import type { LengthDecoderFunction } from 'it-length-prefixed'; +export declare const uint16BEEncode: { + (value: number): Uint8Array; + bytes: number; +}; +export declare const uint16BEDecode: LengthDecoderFunction; +export declare function encode0(message: MessageBuffer): Uint8ArrayList; +export declare function encode1(message: MessageBuffer): Uint8ArrayList; +export declare function encode2(message: MessageBuffer): Uint8ArrayList; +export declare function decode0(input: bytes): MessageBuffer; +export declare function decode1(input: bytes): MessageBuffer; +export declare function decode2(input: bytes): MessageBuffer; +//# sourceMappingURL=encoder.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/encoder.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/encoder.d.ts.map new file mode 100644 index 000000000..76e8c0a65 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/encoder.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../src/encoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAE/D,eAAO,MAAM,cAAc;YAAW,MAAM,GAAG,UAAU;;CAIxD,CAAA;AAGD,eAAO,MAAM,cAAc,EAAE,qBAQ5B,CAAA;AAKD,wBAAgB,OAAO,CAAE,OAAO,EAAE,aAAa,GAAG,cAAc,CAE/D;AAED,wBAAgB,OAAO,CAAE,OAAO,EAAE,aAAa,GAAG,cAAc,CAE/D;AAED,wBAAgB,OAAO,CAAE,OAAO,EAAE,aAAa,GAAG,cAAc,CAE/D;AAED,wBAAgB,OAAO,CAAE,KAAK,EAAE,KAAK,GAAG,aAAa,CAUpD;AAED,wBAAgB,OAAO,CAAE,KAAK,EAAE,KAAK,GAAG,aAAa,CAUpD;AAED,wBAAgB,OAAO,CAAE,KAAK,EAAE,KAAK,GAAG,aAAa,CAUpD"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/encoder.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/encoder.js new file mode 100644 index 000000000..fb9145e54 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/encoder.js @@ -0,0 +1,58 @@ +import { Uint8ArrayList } from 'uint8arraylist'; +import { alloc as uint8ArrayAlloc, allocUnsafe as uint8ArrayAllocUnsafe } from 'uint8arrays/alloc'; +export const uint16BEEncode = (value) => { + const target = uint8ArrayAllocUnsafe(2); + new DataView(target.buffer, target.byteOffset, target.byteLength).setUint16(0, value, false); + return target; +}; +uint16BEEncode.bytes = 2; +export const uint16BEDecode = (data) => { + if (data.length < 2) + throw RangeError('Could not decode int16BE'); + if (data instanceof Uint8Array) { + return new DataView(data.buffer, data.byteOffset, data.byteLength).getUint16(0, false); + } + return data.getUint16(0); +}; +uint16BEDecode.bytes = 2; +// Note: IK and XX encoder usage is opposite (XX uses in stages encode0 where IK uses encode1) +export function encode0(message) { + return new Uint8ArrayList(message.ne, message.ciphertext); +} +export function encode1(message) { + return new Uint8ArrayList(message.ne, message.ns, message.ciphertext); +} +export function encode2(message) { + return new Uint8ArrayList(message.ns, message.ciphertext); +} +export function decode0(input) { + if (input.length < 32) { + throw new Error('Cannot decode stage 0 MessageBuffer: length less than 32 bytes.'); + } + return { + ne: input.subarray(0, 32), + ciphertext: input.subarray(32, input.length), + ns: uint8ArrayAlloc(0) + }; +} +export function decode1(input) { + if (input.length < 80) { + throw new Error('Cannot decode stage 1 MessageBuffer: length less than 80 bytes.'); + } + return { + ne: input.subarray(0, 32), + ns: input.subarray(32, 80), + ciphertext: input.subarray(80, input.length) + }; +} +export function decode2(input) { + if (input.length < 48) { + throw new Error('Cannot decode stage 2 MessageBuffer: length less than 48 bytes.'); + } + return { + ne: uint8ArrayAlloc(0), + ns: input.subarray(0, 48), + ciphertext: input.subarray(48, input.length) + }; +} +//# sourceMappingURL=encoder.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/encoder.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/encoder.js.map new file mode 100644 index 000000000..72d45cb41 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/encoder.js.map @@ -0,0 +1 @@ +{"version":3,"file":"encoder.js","sourceRoot":"","sources":["../../src/encoder.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/errors.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/errors.d.ts new file mode 100644 index 000000000..92c9077d0 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/errors.d.ts @@ -0,0 +1,11 @@ +export declare class UnexpectedPeerError extends Error { + code: string; + constructor(message?: string); + static readonly code = "ERR_UNEXPECTED_PEER"; +} +export declare class InvalidCryptoExchangeError extends Error { + code: string; + constructor(message?: string); + static readonly code = "ERR_INVALID_CRYPTO_EXCHANGE"; +} +//# sourceMappingURL=errors.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/errors.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/errors.d.ts.map new file mode 100644 index 000000000..6be6d3ab6 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/errors.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,mBAAoB,SAAQ,KAAK;IACrC,IAAI,EAAE,MAAM,CAAA;gBAEN,OAAO,SAAoB;IAKxC,MAAM,CAAC,QAAQ,CAAC,IAAI,yBAAwB;CAC7C;AAED,qBAAa,0BAA2B,SAAQ,KAAK;IAC5C,IAAI,EAAE,MAAM,CAAA;gBAEN,OAAO,SAA4B;IAKhD,MAAM,CAAC,QAAQ,CAAC,IAAI,iCAAgC;CACrD"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/errors.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/errors.js new file mode 100644 index 000000000..8c149c67f --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/errors.js @@ -0,0 +1,17 @@ +export class UnexpectedPeerError extends Error { + code; + constructor(message = 'Unexpected Peer') { + super(message); + this.code = UnexpectedPeerError.code; + } + static code = 'ERR_UNEXPECTED_PEER'; +} +export class InvalidCryptoExchangeError extends Error { + code; + constructor(message = 'Invalid crypto exchange') { + super(message); + this.code = InvalidCryptoExchangeError.code; + } + static code = 'ERR_INVALID_CRYPTO_EXCHANGE'; +} +//# sourceMappingURL=errors.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/errors.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/errors.js.map new file mode 100644 index 000000000..b14037001 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/errors.js.map @@ -0,0 +1 @@ +{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACrC,IAAI,CAAQ;IAEnB,YAAa,OAAO,GAAG,iBAAiB;QACtC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAA;IACtC,CAAC;IAED,MAAM,CAAU,IAAI,GAAG,qBAAqB,CAAA;;AAG9C,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAC5C,IAAI,CAAQ;IAEnB,YAAa,OAAO,GAAG,yBAAyB;QAC9C,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC,IAAI,CAAA;IAC7C,CAAC;IAED,MAAM,CAAU,IAAI,GAAG,6BAA6B,CAAA"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshake-xx.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshake-xx.d.ts new file mode 100644 index 000000000..da91dcde7 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshake-xx.d.ts @@ -0,0 +1,36 @@ +import { XX } from './handshakes/xx.js'; +import type { bytes, bytes32 } from './@types/basic.js'; +import type { IHandshake } from './@types/handshake-interface.js'; +import type { NoiseSession } from './@types/handshake.js'; +import type { KeyPair } from './@types/libp2p.js'; +import type { ICryptoInterface } from './crypto.js'; +import type { NoiseComponents } from './index.js'; +import type { NoiseExtensions } from './proto/payload.js'; +import type { PeerId } from '@libp2p/interface'; +import type { LengthPrefixedStream } from 'it-length-prefixed-stream'; +import type { Uint8ArrayList } from 'uint8arraylist'; +export declare class XXHandshake implements IHandshake { + isInitiator: boolean; + session: NoiseSession; + remotePeer: PeerId; + remoteExtensions: NoiseExtensions; + protected payload: bytes; + protected connection: LengthPrefixedStream; + protected xx: XX; + protected staticKeypair: KeyPair; + private readonly prologue; + private readonly log; + constructor(components: NoiseComponents, isInitiator: boolean, payload: bytes, prologue: bytes32, crypto: ICryptoInterface, staticKeypair: KeyPair, connection: LengthPrefixedStream, remotePeer?: PeerId, handshake?: XX); + propose(): Promise; + exchange(): Promise; + finish(): Promise; + encrypt(plaintext: Uint8Array | Uint8ArrayList, session: NoiseSession): Uint8Array | Uint8ArrayList; + decrypt(ciphertext: Uint8Array | Uint8ArrayList, session: NoiseSession, dst?: Uint8Array): { + plaintext: Uint8Array | Uint8ArrayList; + valid: boolean; + }; + getRemoteStaticKey(): Uint8Array | Uint8ArrayList; + private getCS; + protected setRemoteNoiseExtension(e: NoiseExtensions | null | undefined): void; +} +//# sourceMappingURL=handshake-xx.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshake-xx.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshake-xx.d.ts.map new file mode 100644 index 000000000..44b394b43 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshake-xx.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"handshake-xx.d.ts","sourceRoot":"","sources":["../../src/handshake-xx.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAA;AAavC,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAU,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,qBAAa,WAAY,YAAW,UAAU;IACrC,WAAW,EAAE,OAAO,CAAA;IACpB,OAAO,EAAE,YAAY,CAAA;IACrB,UAAU,EAAG,MAAM,CAAA;IACnB,gBAAgB,EAAE,eAAe,CAAiC;IAEzE,SAAS,CAAC,OAAO,EAAE,KAAK,CAAA;IACxB,SAAS,CAAC,UAAU,EAAE,oBAAoB,CAAA;IAC1C,SAAS,CAAC,EAAE,EAAE,EAAE,CAAA;IAChB,SAAS,CAAC,aAAa,EAAE,OAAO,CAAA;IAEhC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;gBAG1B,UAAU,EAAE,eAAe,EAC3B,WAAW,EAAE,OAAO,EACpB,OAAO,EAAE,KAAK,EACd,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,gBAAgB,EACxB,aAAa,EAAE,OAAO,EACtB,UAAU,EAAE,oBAAoB,EAChC,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,EAAE;IAgBH,OAAO,IAAK,OAAO,CAAC,IAAI,CAAC;IAqBzB,QAAQ,IAAK,OAAO,CAAC,IAAI,CAAC;IAiC1B,MAAM,IAAK,OAAO,CAAC,IAAI,CAAC;IA4B9B,OAAO,CAAE,SAAS,EAAE,UAAU,GAAG,cAAc,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU,GAAG,cAAc;IAMpG,OAAO,CAAE,UAAU,EAAE,UAAU,GAAG,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG;QAAE,SAAS,EAAE,UAAU,GAAG,cAAc,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE;IAMtJ,kBAAkB,IAAK,UAAU,GAAG,cAAc;IAIzD,OAAO,CAAC,KAAK;IAYb,SAAS,CAAC,uBAAuB,CAAE,CAAC,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI;CAKhF"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshake-xx.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshake-xx.js new file mode 100644 index 000000000..eb7918e5d --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshake-xx.js @@ -0,0 +1,142 @@ +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc'; +import { decode0, decode1, decode2, encode0, encode1, encode2 } from './encoder.js'; +import { InvalidCryptoExchangeError, UnexpectedPeerError } from './errors.js'; +import { XX } from './handshakes/xx.js'; +import { logLocalStaticKeys, logLocalEphemeralKeys, logRemoteEphemeralKey, logRemoteStaticKey, logCipherState } from './logger.js'; +import { decodePayload, getPeerIdFromPayload, verifySignedPayload } from './utils.js'; +export class XXHandshake { + isInitiator; + session; + remotePeer; + remoteExtensions = { webtransportCerthashes: [] }; + payload; + connection; + xx; + staticKeypair; + prologue; + log; + constructor(components, isInitiator, payload, prologue, crypto, staticKeypair, connection, remotePeer, handshake) { + this.log = components.logger.forComponent('libp2p:noise:xxhandshake'); + this.isInitiator = isInitiator; + this.payload = payload; + this.prologue = prologue; + this.staticKeypair = staticKeypair; + this.connection = connection; + if (remotePeer) { + this.remotePeer = remotePeer; + } + this.xx = handshake ?? new XX(components, crypto); + this.session = this.xx.initSession(this.isInitiator, this.prologue, this.staticKeypair); + } + // stage 0 + async propose() { + logLocalStaticKeys(this.session.hs.s, this.log); + if (this.isInitiator) { + this.log.trace('Stage 0 - Initiator starting to send first message.'); + const messageBuffer = this.xx.sendMessage(this.session, uint8ArrayAlloc(0)); + await this.connection.write(encode0(messageBuffer)); + this.log.trace('Stage 0 - Initiator finished sending first message.'); + logLocalEphemeralKeys(this.session.hs.e, this.log); + } + else { + this.log.trace('Stage 0 - Responder waiting to receive first message...'); + const receivedMessageBuffer = decode0((await this.connection.read()).subarray()); + const { valid } = this.xx.recvMessage(this.session, receivedMessageBuffer); + if (!valid) { + throw new InvalidCryptoExchangeError('xx handshake stage 0 validation fail'); + } + this.log.trace('Stage 0 - Responder received first message.'); + logRemoteEphemeralKey(this.session.hs.re, this.log); + } + } + // stage 1 + async exchange() { + if (this.isInitiator) { + this.log.trace('Stage 1 - Initiator waiting to receive first message from responder...'); + const receivedMessageBuffer = decode1((await this.connection.read()).subarray()); + const { plaintext, valid } = this.xx.recvMessage(this.session, receivedMessageBuffer); + if (!valid) { + throw new InvalidCryptoExchangeError('xx handshake stage 1 validation fail'); + } + this.log.trace('Stage 1 - Initiator received the message.'); + logRemoteEphemeralKey(this.session.hs.re, this.log); + logRemoteStaticKey(this.session.hs.rs, this.log); + this.log.trace("Initiator going to check remote's signature..."); + try { + const decodedPayload = decodePayload(plaintext); + this.remotePeer = this.remotePeer || await getPeerIdFromPayload(decodedPayload); + await verifySignedPayload(this.session.hs.rs, decodedPayload, this.remotePeer); + this.setRemoteNoiseExtension(decodedPayload.extensions); + } + catch (e) { + const err = e; + throw new UnexpectedPeerError(`Error occurred while verifying signed payload: ${err.message}`); + } + this.log.trace('All good with the signature!'); + } + else { + this.log.trace('Stage 1 - Responder sending out first message with signed payload and static key.'); + const messageBuffer = this.xx.sendMessage(this.session, this.payload); + await this.connection.write(encode1(messageBuffer)); + this.log.trace('Stage 1 - Responder sent the second handshake message with signed payload.'); + logLocalEphemeralKeys(this.session.hs.e, this.log); + } + } + // stage 2 + async finish() { + if (this.isInitiator) { + this.log.trace('Stage 2 - Initiator sending third handshake message.'); + const messageBuffer = this.xx.sendMessage(this.session, this.payload); + await this.connection.write(encode2(messageBuffer)); + this.log.trace('Stage 2 - Initiator sent message with signed payload.'); + } + else { + this.log.trace('Stage 2 - Responder waiting for third handshake message...'); + const receivedMessageBuffer = decode2((await this.connection.read()).subarray()); + const { plaintext, valid } = this.xx.recvMessage(this.session, receivedMessageBuffer); + if (!valid) { + throw new InvalidCryptoExchangeError('xx handshake stage 2 validation fail'); + } + this.log.trace('Stage 2 - Responder received the message, finished handshake.'); + try { + const decodedPayload = decodePayload(plaintext); + this.remotePeer = this.remotePeer || await getPeerIdFromPayload(decodedPayload); + await verifySignedPayload(this.session.hs.rs, decodedPayload, this.remotePeer); + this.setRemoteNoiseExtension(decodedPayload.extensions); + } + catch (e) { + const err = e; + throw new UnexpectedPeerError(`Error occurred while verifying signed payload: ${err.message}`); + } + } + logCipherState(this.session, this.log); + } + encrypt(plaintext, session) { + const cs = this.getCS(session); + return this.xx.encryptWithAd(cs, uint8ArrayAlloc(0), plaintext); + } + decrypt(ciphertext, session, dst) { + const cs = this.getCS(session, false); + return this.xx.decryptWithAd(cs, uint8ArrayAlloc(0), ciphertext, dst); + } + getRemoteStaticKey() { + return this.session.hs.rs; + } + getCS(session, encryption = true) { + if (!session.cs1 || !session.cs2) { + throw new InvalidCryptoExchangeError('Handshake not completed properly, cipher state does not exist.'); + } + if (this.isInitiator) { + return encryption ? session.cs1 : session.cs2; + } + else { + return encryption ? session.cs2 : session.cs1; + } + } + setRemoteNoiseExtension(e) { + if (e) { + this.remoteExtensions = e; + } + } +} +//# sourceMappingURL=handshake-xx.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshake-xx.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshake-xx.js.map new file mode 100644 index 000000000..ff939d7f6 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshake-xx.js.map @@ -0,0 +1 @@ +{"version":3,"file":"handshake-xx.js","sourceRoot":"","sources":["../../src/handshake-xx.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/abstract-handshake.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/abstract-handshake.d.ts new file mode 100644 index 000000000..ab58a1184 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/abstract-handshake.d.ts @@ -0,0 +1,39 @@ +import { Uint8ArrayList } from 'uint8arraylist'; +import { Nonce } from '../nonce.js'; +import type { bytes, bytes32 } from '../@types/basic.js'; +import type { CipherState, MessageBuffer, SymmetricState } from '../@types/handshake.js'; +import type { ICryptoInterface } from '../crypto.js'; +import type { NoiseComponents } from '../index.js'; +export interface DecryptedResult { + plaintext: Uint8ArrayList | Uint8Array; + valid: boolean; +} +export interface SplitState { + cs1: CipherState; + cs2: CipherState; +} +export declare abstract class AbstractHandshake { + crypto: ICryptoInterface; + private readonly log; + constructor(components: NoiseComponents, crypto: ICryptoInterface); + encryptWithAd(cs: CipherState, ad: Uint8Array, plaintext: Uint8Array | Uint8ArrayList): Uint8Array | Uint8ArrayList; + decryptWithAd(cs: CipherState, ad: Uint8Array, ciphertext: Uint8Array | Uint8ArrayList, dst?: Uint8Array): DecryptedResult; + protected hasKey(cs: CipherState): boolean; + protected createEmptyKey(): bytes32; + protected isEmptyKey(k: bytes32): boolean; + protected encrypt(k: bytes32, n: Nonce, ad: Uint8Array, plaintext: Uint8Array | Uint8ArrayList): Uint8Array | Uint8ArrayList; + protected encryptAndHash(ss: SymmetricState, plaintext: bytes): Uint8Array | Uint8ArrayList; + protected decrypt(k: bytes32, n: Nonce, ad: bytes, ciphertext: Uint8Array | Uint8ArrayList, dst?: Uint8Array): DecryptedResult; + protected decryptAndHash(ss: SymmetricState, ciphertext: Uint8Array | Uint8ArrayList): DecryptedResult; + protected dh(privateKey: bytes32, publicKey: Uint8Array | Uint8ArrayList): bytes32; + protected mixHash(ss: SymmetricState, data: Uint8Array | Uint8ArrayList): void; + protected getHash(a: Uint8Array, b: Uint8Array | Uint8ArrayList): Uint8Array; + protected mixKey(ss: SymmetricState, ikm: bytes32): void; + protected initializeKey(k: bytes32): CipherState; + protected initializeSymmetric(protocolName: string): SymmetricState; + protected hashProtocolName(protocolName: Uint8Array): bytes32; + protected split(ss: SymmetricState): SplitState; + protected writeMessageRegular(cs: CipherState, payload: bytes): MessageBuffer; + protected readMessageRegular(cs: CipherState, message: MessageBuffer): DecryptedResult; +} +//# sourceMappingURL=abstract-handshake.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/abstract-handshake.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/abstract-handshake.d.ts.map new file mode 100644 index 000000000..9fd52efd7 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/abstract-handshake.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"abstract-handshake.d.ts","sourceRoot":"","sources":["../../../src/handshakes/abstract-handshake.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/abstract-handshake.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/abstract-handshake.js new file mode 100644 index 000000000..19b6d0d6b --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/abstract-handshake.js @@ -0,0 +1,142 @@ +import { Uint8ArrayList } from 'uint8arraylist'; +import { fromString as uint8ArrayFromString } from 'uint8arrays'; +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc'; +import { equals as uint8ArrayEquals } from 'uint8arrays/equals'; +import { Nonce } from '../nonce.js'; +export class AbstractHandshake { + crypto; + log; + constructor(components, crypto) { + this.log = components.logger.forComponent('libp2p:noise:abstract-handshake'); + this.crypto = crypto; + } + encryptWithAd(cs, ad, plaintext) { + const e = this.encrypt(cs.k, cs.n, ad, plaintext); + cs.n.increment(); + return e; + } + decryptWithAd(cs, ad, ciphertext, dst) { + const { plaintext, valid } = this.decrypt(cs.k, cs.n, ad, ciphertext, dst); + if (valid) + cs.n.increment(); + return { plaintext, valid }; + } + // Cipher state related + hasKey(cs) { + return !this.isEmptyKey(cs.k); + } + createEmptyKey() { + return uint8ArrayAlloc(32); + } + isEmptyKey(k) { + const emptyKey = this.createEmptyKey(); + return uint8ArrayEquals(emptyKey, k); + } + encrypt(k, n, ad, plaintext) { + n.assertValue(); + return this.crypto.chaCha20Poly1305Encrypt(plaintext, n.getBytes(), ad, k); + } + encryptAndHash(ss, plaintext) { + let ciphertext; + if (this.hasKey(ss.cs)) { + ciphertext = this.encryptWithAd(ss.cs, ss.h, plaintext); + } + else { + ciphertext = plaintext; + } + this.mixHash(ss, ciphertext); + return ciphertext; + } + decrypt(k, n, ad, ciphertext, dst) { + n.assertValue(); + const encryptedMessage = this.crypto.chaCha20Poly1305Decrypt(ciphertext, n.getBytes(), ad, k, dst); + if (encryptedMessage) { + return { + plaintext: encryptedMessage, + valid: true + }; + } + else { + return { + plaintext: uint8ArrayAlloc(0), + valid: false + }; + } + } + decryptAndHash(ss, ciphertext) { + let plaintext; + let valid = true; + if (this.hasKey(ss.cs)) { + ({ plaintext, valid } = this.decryptWithAd(ss.cs, ss.h, ciphertext)); + } + else { + plaintext = ciphertext; + } + this.mixHash(ss, ciphertext); + return { plaintext, valid }; + } + dh(privateKey, publicKey) { + try { + const derivedU8 = this.crypto.generateX25519SharedKey(privateKey, publicKey); + if (derivedU8.length === 32) { + return derivedU8; + } + return derivedU8.subarray(0, 32); + } + catch (e) { + const err = e; + this.log.error('error deriving shared key', err); + return uint8ArrayAlloc(32); + } + } + mixHash(ss, data) { + ss.h = this.getHash(ss.h, data); + } + getHash(a, b) { + const u = this.crypto.hashSHA256(new Uint8ArrayList(a, b)); + return u; + } + mixKey(ss, ikm) { + const [ck, tempK] = this.crypto.getHKDF(ss.ck, ikm); + ss.cs = this.initializeKey(tempK); + ss.ck = ck; + } + initializeKey(k) { + return { k, n: new Nonce() }; + } + // Symmetric state related + initializeSymmetric(protocolName) { + const protocolNameBytes = uint8ArrayFromString(protocolName, 'utf-8'); + const h = this.hashProtocolName(protocolNameBytes); + const ck = h; + const key = this.createEmptyKey(); + const cs = this.initializeKey(key); + return { cs, ck, h }; + } + hashProtocolName(protocolName) { + if (protocolName.length <= 32) { + const h = uint8ArrayAlloc(32); + h.set(protocolName); + return h; + } + else { + return this.getHash(protocolName, uint8ArrayAlloc(0)); + } + } + split(ss) { + const [tempk1, tempk2] = this.crypto.getHKDF(ss.ck, uint8ArrayAlloc(0)); + const cs1 = this.initializeKey(tempk1); + const cs2 = this.initializeKey(tempk2); + return { cs1, cs2 }; + } + writeMessageRegular(cs, payload) { + const ciphertext = this.encryptWithAd(cs, uint8ArrayAlloc(0), payload); + const ne = this.createEmptyKey(); + const ns = uint8ArrayAlloc(0); + return { ne, ns, ciphertext }; + } + readMessageRegular(cs, message) { + return this.decryptWithAd(cs, uint8ArrayAlloc(0), message.ciphertext); + } +} +//# sourceMappingURL=abstract-handshake.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/abstract-handshake.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/abstract-handshake.js.map new file mode 100644 index 000000000..36897bbc8 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/abstract-handshake.js.map @@ -0,0 +1 @@ +{"version":3,"file":"abstract-handshake.js","sourceRoot":"","sources":["../../../src/handshakes/abstract-handshake.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/xx.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/xx.d.ts new file mode 100644 index 000000000..bf79dc414 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/xx.d.ts @@ -0,0 +1,18 @@ +import { AbstractHandshake, type DecryptedResult } from './abstract-handshake.js'; +import type { bytes32, bytes } from '../@types/basic.js'; +import type { MessageBuffer, NoiseSession } from '../@types/handshake.js'; +import type { KeyPair } from '../@types/libp2p.js'; +export declare class XX extends AbstractHandshake { + private initializeInitiator; + private initializeResponder; + private writeMessageA; + private writeMessageB; + private writeMessageC; + private readMessageA; + private readMessageB; + private readMessageC; + initSession(initiator: boolean, prologue: bytes32, s: KeyPair): NoiseSession; + sendMessage(session: NoiseSession, message: bytes, ephemeral?: KeyPair): MessageBuffer; + recvMessage(session: NoiseSession, message: MessageBuffer): DecryptedResult; +} +//# sourceMappingURL=xx.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/xx.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/xx.d.ts.map new file mode 100644 index 000000000..7a6ec499c --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/xx.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"xx.d.ts","sourceRoot":"","sources":["../../../src/handshakes/xx.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACjF,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAA+B,aAAa,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACtG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAGlD,qBAAa,EAAG,SAAQ,iBAAiB;IACvC,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,YAAY;IAgBb,WAAW,CAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,YAAY;IAkB7E,WAAW,CAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,aAAa;IAkCvF,WAAW,CAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,eAAe;CAkBpF"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/xx.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/xx.js new file mode 100644 index 000000000..dbfa58f06 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/xx.js @@ -0,0 +1,162 @@ +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc'; +import { isValidPublicKey } from '../utils.js'; +import { AbstractHandshake } from './abstract-handshake.js'; +export class XX extends AbstractHandshake { + initializeInitiator(prologue, s, rs, psk) { + const name = 'Noise_XX_25519_ChaChaPoly_SHA256'; + const ss = this.initializeSymmetric(name); + this.mixHash(ss, prologue); + const re = uint8ArrayAlloc(32); + return { ss, s, rs, psk, re }; + } + initializeResponder(prologue, s, rs, psk) { + const name = 'Noise_XX_25519_ChaChaPoly_SHA256'; + const ss = this.initializeSymmetric(name); + this.mixHash(ss, prologue); + const re = uint8ArrayAlloc(32); + return { ss, s, rs, psk, re }; + } + writeMessageA(hs, payload, e) { + const ns = uint8ArrayAlloc(0); + if (e !== undefined) { + hs.e = e; + } + else { + hs.e = this.crypto.generateX25519KeyPair(); + } + const ne = hs.e.publicKey; + this.mixHash(hs.ss, ne); + const ciphertext = this.encryptAndHash(hs.ss, payload); + return { ne, ns, ciphertext }; + } + writeMessageB(hs, payload) { + hs.e = this.crypto.generateX25519KeyPair(); + const ne = hs.e.publicKey; + this.mixHash(hs.ss, ne); + this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.re)); + const spk = hs.s.publicKey; + const ns = this.encryptAndHash(hs.ss, spk); + this.mixKey(hs.ss, this.dh(hs.s.privateKey, hs.re)); + const ciphertext = this.encryptAndHash(hs.ss, payload); + return { ne, ns, ciphertext }; + } + writeMessageC(hs, payload) { + const spk = hs.s.publicKey; + const ns = this.encryptAndHash(hs.ss, spk); + this.mixKey(hs.ss, this.dh(hs.s.privateKey, hs.re)); + const ciphertext = this.encryptAndHash(hs.ss, payload); + const ne = this.createEmptyKey(); + const messageBuffer = { ne, ns, ciphertext }; + const { cs1, cs2 } = this.split(hs.ss); + return { h: hs.ss.h, messageBuffer, cs1, cs2 }; + } + readMessageA(hs, message) { + if (isValidPublicKey(message.ne)) { + hs.re = message.ne; + } + this.mixHash(hs.ss, hs.re); + return this.decryptAndHash(hs.ss, message.ciphertext); + } + readMessageB(hs, message) { + if (isValidPublicKey(message.ne)) { + hs.re = message.ne; + } + this.mixHash(hs.ss, hs.re); + if (!hs.e) { + throw new Error('Handshake state `e` param is missing.'); + } + this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.re)); + const { plaintext: ns, valid: valid1 } = this.decryptAndHash(hs.ss, message.ns); + if (valid1 && isValidPublicKey(ns)) { + hs.rs = ns; + } + this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.rs)); + const { plaintext, valid: valid2 } = this.decryptAndHash(hs.ss, message.ciphertext); + return { plaintext, valid: (valid1 && valid2) }; + } + readMessageC(hs, message) { + const { plaintext: ns, valid: valid1 } = this.decryptAndHash(hs.ss, message.ns); + if (valid1 && isValidPublicKey(ns)) { + hs.rs = ns; + } + if (!hs.e) { + throw new Error('Handshake state `e` param is missing.'); + } + this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.rs)); + const { plaintext, valid: valid2 } = this.decryptAndHash(hs.ss, message.ciphertext); + const { cs1, cs2 } = this.split(hs.ss); + return { h: hs.ss.h, plaintext, valid: (valid1 && valid2), cs1, cs2 }; + } + initSession(initiator, prologue, s) { + const psk = this.createEmptyKey(); + const rs = uint8ArrayAlloc(32); // no static key yet + let hs; + if (initiator) { + hs = this.initializeInitiator(prologue, s, rs, psk); + } + else { + hs = this.initializeResponder(prologue, s, rs, psk); + } + return { + hs, + i: initiator, + mc: 0 + }; + } + sendMessage(session, message, ephemeral) { + let messageBuffer; + if (session.mc === 0) { + messageBuffer = this.writeMessageA(session.hs, message, ephemeral); + } + else if (session.mc === 1) { + messageBuffer = this.writeMessageB(session.hs, message); + } + else if (session.mc === 2) { + const { h, messageBuffer: resultingBuffer, cs1, cs2 } = this.writeMessageC(session.hs, message); + messageBuffer = resultingBuffer; + session.h = h; + session.cs1 = cs1; + session.cs2 = cs2; + } + else if (session.mc > 2) { + if (session.i) { + if (!session.cs1) { + throw new Error('CS1 (cipher state) is not defined'); + } + messageBuffer = this.writeMessageRegular(session.cs1, message); + } + else { + if (!session.cs2) { + throw new Error('CS2 (cipher state) is not defined'); + } + messageBuffer = this.writeMessageRegular(session.cs2, message); + } + } + else { + throw new Error('Session invalid.'); + } + session.mc++; + return messageBuffer; + } + recvMessage(session, message) { + let plaintext = uint8ArrayAlloc(0); + let valid = false; + if (session.mc === 0) { + ({ plaintext, valid } = this.readMessageA(session.hs, message)); + } + else if (session.mc === 1) { + ({ plaintext, valid } = this.readMessageB(session.hs, message)); + } + else if (session.mc === 2) { + const { h, plaintext: resultingPlaintext, valid: resultingValid, cs1, cs2 } = this.readMessageC(session.hs, message); + plaintext = resultingPlaintext; + valid = resultingValid; + session.h = h; + session.cs1 = cs1; + session.cs2 = cs2; + } + session.mc++; + return { plaintext, valid }; + } +} +//# sourceMappingURL=xx.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/xx.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/xx.js.map new file mode 100644 index 000000000..428a5b166 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/handshakes/xx.js.map @@ -0,0 +1 @@ +{"version":3,"file":"xx.js","sourceRoot":"","sources":["../../../src/handshakes/xx.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/index.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/index.d.ts new file mode 100644 index 000000000..69b2f897c --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/index.d.ts @@ -0,0 +1,11 @@ +import type { NoiseInit } from './noise.js'; +import type { NoiseExtensions } from './proto/payload.js'; +import type { ComponentLogger, ConnectionEncrypter, Metrics } from '@libp2p/interface'; +export type { ICryptoInterface } from './crypto.js'; +export { pureJsCrypto } from './crypto/js.js'; +export interface NoiseComponents { + logger: ComponentLogger; + metrics?: Metrics; +} +export declare function noise(init?: NoiseInit): (components: NoiseComponents) => ConnectionEncrypter; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/index.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/index.d.ts.map new file mode 100644 index 000000000..7f7eb0379 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACtF,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,wBAAgB,KAAK,CAAE,IAAI,GAAE,SAAc,GAAG,CAAC,UAAU,EAAE,eAAe,KAAK,mBAAmB,CAAC,eAAe,CAAC,CAElH"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/index.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/index.js new file mode 100644 index 000000000..f0b2095c8 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/index.js @@ -0,0 +1,6 @@ +import { Noise } from './noise.js'; +export { pureJsCrypto } from './crypto/js.js'; +export function noise(init = {}) { + return (components) => new Noise(components, init); +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/index.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/index.js.map new file mode 100644 index 000000000..f068b39ba --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAKlC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAO7C,MAAM,UAAU,KAAK,CAAE,OAAkB,EAAE;IACzC,OAAO,CAAC,UAA2B,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AACrE,CAAC"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/logger.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/logger.d.ts new file mode 100644 index 000000000..a6ae00929 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/logger.d.ts @@ -0,0 +1,10 @@ +import type { NoiseSession } from './@types/handshake.js'; +import type { KeyPair } from './@types/libp2p.js'; +import type { Logger } from '@libp2p/interface'; +import type { Uint8ArrayList } from 'uint8arraylist'; +export declare function logLocalStaticKeys(s: KeyPair, keyLogger: Logger): void; +export declare function logLocalEphemeralKeys(e: KeyPair | undefined, keyLogger: Logger): void; +export declare function logRemoteStaticKey(rs: Uint8Array | Uint8ArrayList, keyLogger: Logger): void; +export declare function logRemoteEphemeralKey(re: Uint8Array | Uint8ArrayList, keyLogger: Logger): void; +export declare function logCipherState(session: NoiseSession, keyLogger: Logger): void; +//# sourceMappingURL=logger.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/logger.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/logger.d.ts.map new file mode 100644 index 000000000..5292e9c8f --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/logger.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,wBAAgB,kBAAkB,CAAE,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAOvE;AAED,wBAAgB,qBAAqB,CAAE,CAAC,EAAE,OAAO,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAWtF;AAED,wBAAgB,kBAAkB,CAAE,EAAE,EAAE,UAAU,GAAG,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAM5F;AAED,wBAAgB,qBAAqB,CAAE,EAAE,EAAE,UAAU,GAAG,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAM/F;AAED,wBAAgB,cAAc,CAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAW9E"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/logger.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/logger.js new file mode 100644 index 000000000..6dd0beebf --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/logger.js @@ -0,0 +1,46 @@ +import { toString as uint8ArrayToString } from 'uint8arrays/to-string'; +import { DUMP_SESSION_KEYS } from './constants.js'; +export function logLocalStaticKeys(s, keyLogger) { + if (!keyLogger.enabled || !DUMP_SESSION_KEYS) { + return; + } + keyLogger(`LOCAL_STATIC_PUBLIC_KEY ${uint8ArrayToString(s.publicKey, 'hex')}`); + keyLogger(`LOCAL_STATIC_PRIVATE_KEY ${uint8ArrayToString(s.privateKey, 'hex')}`); +} +export function logLocalEphemeralKeys(e, keyLogger) { + if (!keyLogger.enabled || !DUMP_SESSION_KEYS) { + return; + } + if (e) { + keyLogger(`LOCAL_PUBLIC_EPHEMERAL_KEY ${uint8ArrayToString(e.publicKey, 'hex')}`); + keyLogger(`LOCAL_PRIVATE_EPHEMERAL_KEY ${uint8ArrayToString(e.privateKey, 'hex')}`); + } + else { + keyLogger('Missing local ephemeral keys.'); + } +} +export function logRemoteStaticKey(rs, keyLogger) { + if (!keyLogger.enabled || !DUMP_SESSION_KEYS) { + return; + } + keyLogger(`REMOTE_STATIC_PUBLIC_KEY ${uint8ArrayToString(rs.subarray(), 'hex')}`); +} +export function logRemoteEphemeralKey(re, keyLogger) { + if (!keyLogger.enabled || !DUMP_SESSION_KEYS) { + return; + } + keyLogger(`REMOTE_EPHEMERAL_PUBLIC_KEY ${uint8ArrayToString(re.subarray(), 'hex')}`); +} +export function logCipherState(session, keyLogger) { + if (!keyLogger.enabled || !DUMP_SESSION_KEYS) { + return; + } + if (session.cs1 && session.cs2) { + keyLogger(`CIPHER_STATE_1 ${session.cs1.n.getUint64()} ${uint8ArrayToString(session.cs1.k, 'hex')}`); + keyLogger(`CIPHER_STATE_2 ${session.cs2.n.getUint64()} ${uint8ArrayToString(session.cs2.k, 'hex')}`); + } + else { + keyLogger('Missing cipher state.'); + } +} +//# sourceMappingURL=logger.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/logger.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/logger.js.map new file mode 100644 index 000000000..a882d753c --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/logger.js.map @@ -0,0 +1 @@ +{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAMlD,MAAM,UAAU,kBAAkB,CAAE,CAAU,EAAE,SAAiB;IAC/D,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7C,OAAM;IACR,CAAC;IAED,SAAS,CAAC,2BAA2B,kBAAkB,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;IAC9E,SAAS,CAAC,4BAA4B,kBAAkB,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;AAClF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAE,CAAsB,EAAE,SAAiB;IAC9E,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7C,OAAM;IACR,CAAC;IAED,IAAI,CAAC,EAAE,CAAC;QACN,SAAS,CAAC,8BAA8B,kBAAkB,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;QACjF,SAAS,CAAC,+BAA+B,kBAAkB,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;IACrF,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,+BAA+B,CAAC,CAAA;IAC5C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAE,EAA+B,EAAE,SAAiB;IACpF,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7C,OAAM;IACR,CAAC;IAED,SAAS,CAAC,4BAA4B,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;AACnF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAE,EAA+B,EAAE,SAAiB;IACvF,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7C,OAAM;IACR,CAAC;IAED,SAAS,CAAC,+BAA+B,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;AACtF,CAAC;AAED,MAAM,UAAU,cAAc,CAAE,OAAqB,EAAE,SAAiB;IACtE,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7C,OAAM;IACR,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC/B,SAAS,CAAC,kBAAkB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;QACpG,SAAS,CAAC,kBAAkB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;IACtG,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,uBAAuB,CAAC,CAAA;IACpC,CAAC;AACH,CAAC"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/metrics.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/metrics.d.ts new file mode 100644 index 000000000..a049afee7 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/metrics.d.ts @@ -0,0 +1,4 @@ +import type { Counter, Metrics } from '@libp2p/interface'; +export type MetricsRegistry = Record; +export declare function registerMetrics(metrics: Metrics): MetricsRegistry; +//# sourceMappingURL=metrics.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/metrics.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/metrics.d.ts.map new file mode 100644 index 000000000..057cd6f9f --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/metrics.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAEzD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAErD,wBAAgB,eAAe,CAAE,OAAO,EAAE,OAAO,GAAG,eAAe,CA2BlE"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/metrics.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/metrics.js new file mode 100644 index 000000000..1b5123db8 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/metrics.js @@ -0,0 +1,20 @@ +export function registerMetrics(metrics) { + return { + xxHandshakeSuccesses: metrics.registerCounter('libp2p_noise_xxhandshake_successes_total', { + help: 'Total count of noise xxHandshakes successes_' + }), + xxHandshakeErrors: metrics.registerCounter('libp2p_noise_xxhandshake_error_total', { + help: 'Total count of noise xxHandshakes errors' + }), + encryptedPackets: metrics.registerCounter('libp2p_noise_encrypted_packets_total', { + help: 'Total count of noise encrypted packets successfully' + }), + decryptedPackets: metrics.registerCounter('libp2p_noise_decrypted_packets_total', { + help: 'Total count of noise decrypted packets' + }), + decryptErrors: metrics.registerCounter('libp2p_noise_decrypt_errors_total', { + help: 'Total count of noise decrypt errors' + }) + }; +} +//# sourceMappingURL=metrics.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/metrics.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/metrics.js.map new file mode 100644 index 000000000..9c23b331e --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/metrics.js.map @@ -0,0 +1 @@ +{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/metrics.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,eAAe,CAAE,OAAgB;IAC/C,OAAO;QACL,oBAAoB,EAAE,OAAO,CAAC,eAAe,CAC3C,0CAA0C,EAAE;YAC1C,IAAI,EAAE,8CAA8C;SACrD,CAAC;QAEJ,iBAAiB,EAAE,OAAO,CAAC,eAAe,CACxC,sCAAsC,EAAE;YACtC,IAAI,EAAE,0CAA0C;SACjD,CAAC;QAEJ,gBAAgB,EAAE,OAAO,CAAC,eAAe,CACvC,sCAAsC,EAAE;YACtC,IAAI,EAAE,qDAAqD;SAC5D,CAAC;QAEJ,gBAAgB,EAAE,OAAO,CAAC,eAAe,CACvC,sCAAsC,EAAE;YACtC,IAAI,EAAE,wCAAwC;SAC/C,CAAC;QAEJ,aAAa,EAAE,OAAO,CAAC,eAAe,CACpC,mCAAmC,EAAE;YACnC,IAAI,EAAE,qCAAqC;SAC5C,CAAC;KACL,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/noise.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/noise.d.ts new file mode 100644 index 000000000..e6d16cce3 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/noise.d.ts @@ -0,0 +1,55 @@ +import type { bytes } from './@types/basic.js'; +import type { INoiseConnection } from './@types/libp2p.js'; +import type { ICryptoInterface } from './crypto.js'; +import type { NoiseComponents } from './index.js'; +import type { NoiseExtensions } from './proto/payload.js'; +import type { MultiaddrConnection, SecuredConnection, PeerId } from '@libp2p/interface'; +import type { Duplex } from 'it-stream-types'; +import type { Uint8ArrayList } from 'uint8arraylist'; +export interface NoiseInit { + /** + * x25519 private key, reuse for faster handshakes + */ + staticNoiseKey?: bytes; + extensions?: NoiseExtensions; + crypto?: ICryptoInterface; + prologueBytes?: Uint8Array; +} +export declare class Noise implements INoiseConnection { + protocol: string; + crypto: ICryptoInterface; + private readonly prologue; + private readonly staticKeys; + private readonly extensions?; + private readonly metrics?; + private readonly components; + constructor(components: NoiseComponents, init?: NoiseInit); + /** + * Encrypt outgoing data to the remote party (handshake as initiator) + * + * @param {PeerId} localPeer - PeerId of the receiving peer + * @param {Stream} connection - streaming iterable duplex that will be encrypted + * @param {PeerId} remotePeer - PeerId of the remote peer. Used to validate the integrity of the remote peer. + * @returns {Promise>} + */ + secureOutbound> = MultiaddrConnection>(localPeer: PeerId, connection: Stream, remotePeer?: PeerId): Promise>; + /** + * Decrypt incoming data (handshake as responder). + * + * @param {PeerId} localPeer - PeerId of the receiving peer. + * @param {Stream} connection - streaming iterable duplex that will be encrypted. + * @param {PeerId} remotePeer - optional PeerId of the initiating peer, if known. This may only exist during transport upgrades. + * @returns {Promise>} + */ + secureInbound> = MultiaddrConnection>(localPeer: PeerId, connection: Stream, remotePeer?: PeerId): Promise>; + /** + * If Noise pipes supported, tries IK handshake first with XX as fallback if it fails. + * If noise pipes disabled or remote peer static key is unknown, use XX. + * + * @param {HandshakeParams} params + */ + private performHandshake; + private performXXHandshake; + private createSecureConnection; +} +//# sourceMappingURL=noise.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/noise.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/noise.d.ts.map new file mode 100644 index 000000000..0bac02bfc --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/noise.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"noise.d.ts","sourceRoot":"","sources":["../../src/noise.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,KAAK,EAAE,gBAAgB,EAAW,MAAM,oBAAoB,CAAA;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACvF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AASpD,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,cAAc,CAAC,EAAE,KAAK,CAAA;IACtB,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,MAAM,CAAC,EAAE,gBAAgB,CAAA;IACzB,aAAa,CAAC,EAAE,UAAU,CAAA;CAC3B;AAED,qBAAa,KAAM,YAAW,gBAAgB;IACrC,QAAQ,SAAW;IACnB,MAAM,EAAE,gBAAgB,CAAA;IAE/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAY;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAiB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;gBAE/B,UAAU,EAAE,eAAe,EAAE,IAAI,GAAE,SAAc;IAkB9D;;;;;;;OAOG;IACU,cAAc,CAAE,MAAM,SAAS,MAAM,CAAC,cAAc,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC,GAAG,mBAAmB,EAAG,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IA2BxO;;;;;;;OAOG;IACU,aAAa,CAAE,MAAM,SAAS,MAAM,CAAC,cAAc,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC,GAAG,mBAAmB,EAAG,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IA2BvO;;;;;OAKG;YACW,gBAAgB;YAOhB,kBAAkB;YAgClB,sBAAsB;CAmBrC"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/noise.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/noise.js new file mode 100644 index 000000000..f2d0ead9f --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/noise.js @@ -0,0 +1,138 @@ +import { decode } from 'it-length-prefixed'; +import { lpStream } from 'it-length-prefixed-stream'; +import { duplexPair } from 'it-pair/duplex'; +import { pipe } from 'it-pipe'; +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc'; +import { NOISE_MSG_MAX_LENGTH_BYTES } from './constants.js'; +import { defaultCrypto } from './crypto/index.js'; +import { decryptStream, encryptStream } from './crypto/streaming.js'; +import { uint16BEDecode, uint16BEEncode } from './encoder.js'; +import { XXHandshake } from './handshake-xx.js'; +import { registerMetrics } from './metrics.js'; +import { getPayload } from './utils.js'; +export class Noise { + protocol = '/noise'; + crypto; + prologue; + staticKeys; + extensions; + metrics; + components; + constructor(components, init = {}) { + const { staticNoiseKey, extensions, crypto, prologueBytes } = init; + const { metrics } = components; + this.components = components; + this.crypto = crypto ?? defaultCrypto; + this.extensions = extensions; + this.metrics = metrics ? registerMetrics(metrics) : undefined; + if (staticNoiseKey) { + // accepts x25519 private key of length 32 + this.staticKeys = this.crypto.generateX25519KeyPairFromSeed(staticNoiseKey); + } + else { + this.staticKeys = this.crypto.generateX25519KeyPair(); + } + this.prologue = prologueBytes ?? uint8ArrayAlloc(0); + } + /** + * Encrypt outgoing data to the remote party (handshake as initiator) + * + * @param {PeerId} localPeer - PeerId of the receiving peer + * @param {Stream} connection - streaming iterable duplex that will be encrypted + * @param {PeerId} remotePeer - PeerId of the remote peer. Used to validate the integrity of the remote peer. + * @returns {Promise>} + */ + async secureOutbound(localPeer, connection, remotePeer) { + const wrappedConnection = lpStream(connection, { + lengthEncoder: uint16BEEncode, + lengthDecoder: uint16BEDecode, + maxDataLength: NOISE_MSG_MAX_LENGTH_BYTES + }); + const handshake = await this.performHandshake({ + connection: wrappedConnection, + isInitiator: true, + localPeer, + remotePeer + }); + const conn = await this.createSecureConnection(wrappedConnection, handshake); + connection.source = conn.source; + connection.sink = conn.sink; + return { + conn: connection, + remoteExtensions: handshake.remoteExtensions, + remotePeer: handshake.remotePeer + }; + } + /** + * Decrypt incoming data (handshake as responder). + * + * @param {PeerId} localPeer - PeerId of the receiving peer. + * @param {Stream} connection - streaming iterable duplex that will be encrypted. + * @param {PeerId} remotePeer - optional PeerId of the initiating peer, if known. This may only exist during transport upgrades. + * @returns {Promise>} + */ + async secureInbound(localPeer, connection, remotePeer) { + const wrappedConnection = lpStream(connection, { + lengthEncoder: uint16BEEncode, + lengthDecoder: uint16BEDecode, + maxDataLength: NOISE_MSG_MAX_LENGTH_BYTES + }); + const handshake = await this.performHandshake({ + connection: wrappedConnection, + isInitiator: false, + localPeer, + remotePeer + }); + const conn = await this.createSecureConnection(wrappedConnection, handshake); + connection.source = conn.source; + connection.sink = conn.sink; + return { + conn: connection, + remotePeer: handshake.remotePeer, + remoteExtensions: handshake.remoteExtensions + }; + } + /** + * If Noise pipes supported, tries IK handshake first with XX as fallback if it fails. + * If noise pipes disabled or remote peer static key is unknown, use XX. + * + * @param {HandshakeParams} params + */ + async performHandshake(params) { + const payload = await getPayload(params.localPeer, this.staticKeys.publicKey, this.extensions); + // run XX handshake + return this.performXXHandshake(params, payload); + } + async performXXHandshake(params, payload) { + const { isInitiator, remotePeer, connection } = params; + const handshake = new XXHandshake(this.components, isInitiator, payload, this.prologue, this.crypto, this.staticKeys, connection, remotePeer); + try { + await handshake.propose(); + await handshake.exchange(); + await handshake.finish(); + this.metrics?.xxHandshakeSuccesses.increment(); + } + catch (e) { + this.metrics?.xxHandshakeErrors.increment(); + if (e instanceof Error) { + e.message = `Error occurred during XX handshake: ${e.message}`; + throw e; + } + } + return handshake; + } + async createSecureConnection(connection, handshake) { + // Create encryption box/unbox wrapper + const [secure, user] = duplexPair(); + const network = connection.unwrap(); + await pipe(secure, // write to wrapper + encryptStream(handshake, this.metrics), // encrypt data + prefix with message length + network, // send to the remote peer + (source) => decode(source, { lengthDecoder: uint16BEDecode }), // read message length prefix + decryptStream(handshake, this.metrics), // decrypt the incoming data + secure // pipe to the wrapper + ); + return user; + } +} +//# sourceMappingURL=noise.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/noise.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/noise.js.map new file mode 100644 index 000000000..18ec24d3d --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/noise.js.map @@ -0,0 +1 @@ +{"version":3,"file":"noise.js","sourceRoot":"","sources":["../../src/noise.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/nonce.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/nonce.d.ts new file mode 100644 index 000000000..662855bd3 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/nonce.d.ts @@ -0,0 +1,18 @@ +import type { bytes, uint64 } from './@types/basic.js'; +export declare const MIN_NONCE = 0; +export declare const MAX_NONCE = 4294967295; +/** + * The nonce is an uint that's increased over time. + * Maintaining different representations help improve performance. + */ +export declare class Nonce { + private n; + private readonly bytes; + private readonly view; + constructor(n?: number); + increment(): void; + getBytes(): bytes; + getUint64(): uint64; + assertValue(): void; +} +//# sourceMappingURL=nonce.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/nonce.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/nonce.d.ts.map new file mode 100644 index 000000000..6e502d077 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/nonce.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"nonce.d.ts","sourceRoot":"","sources":["../../src/nonce.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAEtD,eAAO,MAAM,SAAS,IAAI,CAAA;AAO1B,eAAO,MAAM,SAAS,aAAa,CAAA;AAInC;;;GAGG;AACH,qBAAa,KAAK;IAChB,OAAO,CAAC,CAAC,CAAQ;IACjB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAU;gBAElB,CAAC,SAAY;IAO1B,SAAS,IAAK,IAAI;IAMlB,QAAQ,IAAK,KAAK;IAIlB,SAAS,IAAK,MAAM;IAIpB,WAAW,IAAK,IAAI;CAKrB"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/nonce.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/nonce.js new file mode 100644 index 000000000..0130475cf --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/nonce.js @@ -0,0 +1,42 @@ +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc'; +export const MIN_NONCE = 0; +// For performance reasons, the nonce is represented as a JS `number` +// Although JS `number` can safely represent integers up to 2 ** 53 - 1, we choose to only use +// 4 bytes to store the data for performance reason. +// This is a slight deviation from the noise spec, which describes the max nonce as 2 ** 64 - 2 +// The effect is that this implementation will need a new handshake to be performed after fewer messages are exchanged than other implementations with full uint64 nonces. +// this MAX_NONCE is still a large number of messages, so the practical effect of this is negligible. +export const MAX_NONCE = 0xffffffff; +const ERR_MAX_NONCE = 'Cipherstate has reached maximum n, a new handshake must be performed'; +/** + * The nonce is an uint that's increased over time. + * Maintaining different representations help improve performance. + */ +export class Nonce { + n; + bytes; + view; + constructor(n = MIN_NONCE) { + this.n = n; + this.bytes = uint8ArrayAlloc(12); + this.view = new DataView(this.bytes.buffer, this.bytes.byteOffset, this.bytes.byteLength); + this.view.setUint32(4, n, true); + } + increment() { + this.n++; + // Even though we're treating the nonce as 8 bytes, RFC7539 specifies 12 bytes for a nonce. + this.view.setUint32(4, this.n, true); + } + getBytes() { + return this.bytes; + } + getUint64() { + return this.n; + } + assertValue() { + if (this.n > MAX_NONCE) { + throw new Error(ERR_MAX_NONCE); + } + } +} +//# sourceMappingURL=nonce.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/nonce.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/nonce.js.map new file mode 100644 index 000000000..4bd93b611 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/nonce.js.map @@ -0,0 +1 @@ +{"version":3,"file":"nonce.js","sourceRoot":"","sources":["../../src/nonce.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAG5D,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAA;AAC1B,qEAAqE;AACrE,8FAA8F;AAC9F,oDAAoD;AACpD,+FAA+F;AAC/F,0KAA0K;AAC1K,qGAAqG;AACrG,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAA;AAEnC,MAAM,aAAa,GAAG,sEAAsE,CAAA;AAE5F;;;GAGG;AACH,MAAM,OAAO,KAAK;IACR,CAAC,CAAQ;IACA,KAAK,CAAO;IACZ,IAAI,CAAU;IAE/B,YAAa,CAAC,GAAG,SAAS;QACxB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;QACV,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC,EAAE,CAAC,CAAA;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QACzF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;IACjC,CAAC;IAED,SAAS;QACP,IAAI,CAAC,CAAC,EAAE,CAAA;QACR,2FAA2F;QAC3F,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IACtC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,CAAC,CAAA;IACf,CAAC;IAED,WAAW;QACT,IAAI,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;QAChC,CAAC;IACH,CAAC;CACF"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/proto/payload.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/proto/payload.d.ts new file mode 100644 index 000000000..9d10fef73 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/proto/payload.d.ts @@ -0,0 +1,21 @@ +import { type Codec } from 'protons-runtime'; +import type { Uint8ArrayList } from 'uint8arraylist'; +export interface NoiseExtensions { + webtransportCerthashes: Uint8Array[]; +} +export declare namespace NoiseExtensions { + const codec: () => Codec; + const encode: (obj: Partial) => Uint8Array; + const decode: (buf: Uint8Array | Uint8ArrayList) => NoiseExtensions; +} +export interface NoiseHandshakePayload { + identityKey: Uint8Array; + identitySig: Uint8Array; + extensions?: NoiseExtensions; +} +export declare namespace NoiseHandshakePayload { + const codec: () => Codec; + const encode: (obj: Partial) => Uint8Array; + const decode: (buf: Uint8Array | Uint8ArrayList) => NoiseHandshakePayload; +} +//# sourceMappingURL=payload.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/proto/payload.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/proto/payload.d.ts.map new file mode 100644 index 000000000..69519e688 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/proto/payload.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../src/proto/payload.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,KAAK,EAAyC,MAAM,iBAAiB,CAAA;AAEnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,MAAM,WAAW,eAAe;IAC9B,sBAAsB,EAAE,UAAU,EAAE,CAAA;CACrC;AAED,yBAAiB,eAAe,CAAC;IAGxB,MAAM,KAAK,QAAO,MAAM,eAAe,CA4C7C,CAAA;IAEM,MAAM,MAAM,QAAS,QAAQ,eAAe,CAAC,KAAG,UAEtD,CAAA;IAEM,MAAM,MAAM,QAAS,UAAU,GAAG,cAAc,KAAG,eAEzD,CAAA;CACF;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,UAAU,CAAA;IACvB,WAAW,EAAE,UAAU,CAAA;IACvB,UAAU,CAAC,EAAE,eAAe,CAAA;CAC7B;AAED,yBAAiB,qBAAqB,CAAC;IAG9B,MAAM,KAAK,QAAO,MAAM,qBAAqB,CA6DnD,CAAA;IAEM,MAAM,MAAM,QAAS,QAAQ,qBAAqB,CAAC,KAAG,UAE5D,CAAA;IAEM,MAAM,MAAM,QAAS,UAAU,GAAG,cAAc,KAAG,qBAEzD,CAAA;CACF"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/proto/payload.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/proto/payload.js new file mode 100644 index 000000000..6ff217bdf --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/proto/payload.js @@ -0,0 +1,119 @@ +/* eslint-disable import/export */ +/* eslint-disable complexity */ +/* eslint-disable @typescript-eslint/no-namespace */ +/* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */ +/* eslint-disable @typescript-eslint/no-empty-interface */ +import { decodeMessage, encodeMessage, message } from 'protons-runtime'; +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc'; +export var NoiseExtensions; +(function (NoiseExtensions) { + let _codec; + NoiseExtensions.codec = () => { + if (_codec == null) { + _codec = message((obj, w, opts = {}) => { + if (opts.lengthDelimited !== false) { + w.fork(); + } + if (obj.webtransportCerthashes != null) { + for (const value of obj.webtransportCerthashes) { + w.uint32(10); + w.bytes(value); + } + } + if (opts.lengthDelimited !== false) { + w.ldelim(); + } + }, (reader, length) => { + const obj = { + webtransportCerthashes: [] + }; + const end = length == null ? reader.len : reader.pos + length; + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: { + obj.webtransportCerthashes.push(reader.bytes()); + break; + } + default: { + reader.skipType(tag & 7); + break; + } + } + } + return obj; + }); + } + return _codec; + }; + NoiseExtensions.encode = (obj) => { + return encodeMessage(obj, NoiseExtensions.codec()); + }; + NoiseExtensions.decode = (buf) => { + return decodeMessage(buf, NoiseExtensions.codec()); + }; +})(NoiseExtensions || (NoiseExtensions = {})); +export var NoiseHandshakePayload; +(function (NoiseHandshakePayload) { + let _codec; + NoiseHandshakePayload.codec = () => { + if (_codec == null) { + _codec = message((obj, w, opts = {}) => { + if (opts.lengthDelimited !== false) { + w.fork(); + } + if ((obj.identityKey != null && obj.identityKey.byteLength > 0)) { + w.uint32(10); + w.bytes(obj.identityKey); + } + if ((obj.identitySig != null && obj.identitySig.byteLength > 0)) { + w.uint32(18); + w.bytes(obj.identitySig); + } + if (obj.extensions != null) { + w.uint32(34); + NoiseExtensions.codec().encode(obj.extensions, w); + } + if (opts.lengthDelimited !== false) { + w.ldelim(); + } + }, (reader, length) => { + const obj = { + identityKey: uint8ArrayAlloc(0), + identitySig: uint8ArrayAlloc(0) + }; + const end = length == null ? reader.len : reader.pos + length; + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: { + obj.identityKey = reader.bytes(); + break; + } + case 2: { + obj.identitySig = reader.bytes(); + break; + } + case 4: { + obj.extensions = NoiseExtensions.codec().decode(reader, reader.uint32()); + break; + } + default: { + reader.skipType(tag & 7); + break; + } + } + } + return obj; + }); + } + return _codec; + }; + NoiseHandshakePayload.encode = (obj) => { + return encodeMessage(obj, NoiseHandshakePayload.codec()); + }; + NoiseHandshakePayload.decode = (buf) => { + return decodeMessage(buf, NoiseHandshakePayload.codec()); + }; +})(NoiseHandshakePayload || (NoiseHandshakePayload = {})); +//# sourceMappingURL=payload.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/proto/payload.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/proto/payload.js.map new file mode 100644 index 000000000..7b990cd53 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/proto/payload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"payload.js","sourceRoot":"","sources":["../../../src/proto/payload.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/utils.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/utils.d.ts new file mode 100644 index 000000000..8f125ba47 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/utils.d.ts @@ -0,0 +1,21 @@ +import { type Uint8ArrayList } from 'uint8arraylist'; +import { type NoiseExtensions, NoiseHandshakePayload } from './proto/payload.js'; +import type { bytes } from './@types/basic.js'; +import type { PeerId } from '@libp2p/interface'; +export declare function getPayload(localPeer: PeerId, staticPublicKey: bytes, extensions?: NoiseExtensions): Promise; +export declare function createHandshakePayload(libp2pPublicKey: Uint8Array, signedPayload: Uint8Array, extensions?: NoiseExtensions): bytes; +export declare function signPayload(peerId: PeerId, payload: Uint8Array | Uint8ArrayList): Promise; +export declare function getPeerIdFromPayload(payload: NoiseHandshakePayload): Promise; +export declare function decodePayload(payload: Uint8Array | Uint8ArrayList): NoiseHandshakePayload; +export declare function getHandshakePayload(publicKey: Uint8Array | Uint8ArrayList): Uint8Array | Uint8ArrayList; +/** + * Verifies signed payload, throws on any irregularities. + * + * @param {bytes} noiseStaticKey - owner's noise static key + * @param {bytes} payload - decoded payload + * @param {PeerId} remotePeer - owner's libp2p peer ID + * @returns {Promise} - peer ID of payload owner + */ +export declare function verifySignedPayload(noiseStaticKey: Uint8Array | Uint8ArrayList, payload: NoiseHandshakePayload, remotePeer: PeerId): Promise; +export declare function isValidPublicKey(pk: Uint8Array | Uint8ArrayList): boolean; +//# sourceMappingURL=utils.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/utils.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/utils.d.ts.map new file mode 100644 index 000000000..0d471017d --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/utils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,cAAc,EAAoB,MAAM,gBAAgB,CAAA;AAGtE,OAAO,EAAE,KAAK,eAAe,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAChF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE/C,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,KAAK,EACtB,UAAU,CAAC,EAAE,eAAe,GAC3B,OAAO,CAAC,KAAK,CAAC,CAYhB;AAED,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,UAAU,EAC3B,aAAa,EAAE,UAAU,EACzB,UAAU,CAAC,EAAE,eAAe,GAC3B,KAAK,CAMP;AAED,wBAAsB,WAAW,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,CAQvG;AAED,wBAAsB,oBAAoB,CAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAE3F;AAED,wBAAgB,aAAa,CAAE,OAAO,EAAE,UAAU,GAAG,cAAc,GAAG,qBAAqB,CAE1F;AAED,wBAAgB,mBAAmB,CAAE,SAAS,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,GAAG,cAAc,CAUxG;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,cAAc,EAAE,UAAU,GAAG,cAAc,EAC3C,OAAO,EAAE,qBAAqB,EAC9B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAyBjB;AAED,wBAAgB,gBAAgB,CAAE,EAAE,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,CAU1E"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/utils.js b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/utils.js new file mode 100644 index 000000000..f0325ded9 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/utils.js @@ -0,0 +1,79 @@ +import { unmarshalPublicKey, unmarshalPrivateKey } from '@libp2p/crypto/keys'; +import { peerIdFromKeys } from '@libp2p/peer-id'; +import { isUint8ArrayList } from 'uint8arraylist'; +import { concat as uint8ArrayConcat } from 'uint8arrays/concat'; +import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'; +import { NoiseHandshakePayload } from './proto/payload.js'; +export async function getPayload(localPeer, staticPublicKey, extensions) { + const signedPayload = await signPayload(localPeer, getHandshakePayload(staticPublicKey)); + if (localPeer.publicKey == null) { + throw new Error('PublicKey was missing from local PeerId'); + } + return createHandshakePayload(localPeer.publicKey, signedPayload, extensions); +} +export function createHandshakePayload(libp2pPublicKey, signedPayload, extensions) { + return NoiseHandshakePayload.encode({ + identityKey: libp2pPublicKey, + identitySig: signedPayload, + extensions: extensions ?? { webtransportCerthashes: [] } + }).subarray(); +} +export async function signPayload(peerId, payload) { + if (peerId.privateKey == null) { + throw new Error('PrivateKey was missing from PeerId'); + } + const privateKey = await unmarshalPrivateKey(peerId.privateKey); + return privateKey.sign(payload); +} +export async function getPeerIdFromPayload(payload) { + return peerIdFromKeys(payload.identityKey); +} +export function decodePayload(payload) { + return NoiseHandshakePayload.decode(payload); +} +export function getHandshakePayload(publicKey) { + const prefix = uint8ArrayFromString('noise-libp2p-static-key:'); + if (publicKey instanceof Uint8Array) { + return uint8ArrayConcat([prefix, publicKey], prefix.length + publicKey.length); + } + publicKey.prepend(prefix); + return publicKey; +} +/** + * Verifies signed payload, throws on any irregularities. + * + * @param {bytes} noiseStaticKey - owner's noise static key + * @param {bytes} payload - decoded payload + * @param {PeerId} remotePeer - owner's libp2p peer ID + * @returns {Promise} - peer ID of payload owner + */ +export async function verifySignedPayload(noiseStaticKey, payload, remotePeer) { + // Unmarshaling from PublicKey protobuf + const payloadPeerId = await peerIdFromKeys(payload.identityKey); + if (!payloadPeerId.equals(remotePeer)) { + throw new Error(`Payload identity key ${payloadPeerId.toString()} does not match expected remote peer ${remotePeer.toString()}`); + } + const generatedPayload = getHandshakePayload(noiseStaticKey); + if (payloadPeerId.publicKey == null) { + throw new Error('PublicKey was missing from PeerId'); + } + if (payload.identitySig == null) { + throw new Error('Signature was missing from message'); + } + const publicKey = unmarshalPublicKey(payloadPeerId.publicKey); + const valid = await publicKey.verify(generatedPayload, payload.identitySig); + if (!valid) { + throw new Error("Static key doesn't match to peer that signed payload!"); + } + return payloadPeerId; +} +export function isValidPublicKey(pk) { + if (!(pk instanceof Uint8Array) && !(isUint8ArrayList(pk))) { + return false; + } + if (pk.byteLength !== 32) { + return false; + } + return true; +} +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/utils.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/utils.js.map new file mode 100644 index 000000000..d7076f918 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/src/utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/tsconfig.tsbuildinfo b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/tsconfig.tsbuildinfo new file mode 100644 index 000000000..82919fa7d --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/dist/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"program":{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/typescript/lib/lib.es2022.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.webworker.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/typescript/lib/lib.es2022.array.d.ts","../node_modules/typescript/lib/lib.es2022.error.d.ts","../node_modules/typescript/lib/lib.es2022.intl.d.ts","../node_modules/typescript/lib/lib.es2022.object.d.ts","../node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2022.string.d.ts","../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../src/constants.ts","../node_modules/uint8arraylist/dist/src/index.d.ts","../src/@types/basic.ts","../node_modules/protons-runtime/dist/src/codec.d.ts","../node_modules/protons-runtime/dist/src/decode.d.ts","../node_modules/protons-runtime/dist/src/encode.d.ts","../node_modules/protons-runtime/dist/src/codecs/enum.d.ts","../node_modules/protons-runtime/dist/src/codecs/message.d.ts","../node_modules/protons-runtime/dist/src/utils/reader.d.ts","../node_modules/protons-runtime/dist/src/utils/writer.d.ts","../node_modules/protons-runtime/dist/src/index.d.ts","../node_modules/uint8arrays/dist/src/alloc.d.ts","../src/proto/payload.ts","../node_modules/multiformats/dist/types/src/bases/interface.d.ts","../node_modules/multiformats/dist/types/src/block/interface.d.ts","../node_modules/multiformats/dist/types/src/hashes/interface.d.ts","../node_modules/multiformats/dist/types/src/link/interface.d.ts","../node_modules/multiformats/dist/types/src/cid.d.ts","../node_modules/@libp2p/interface/dist/src/peer-id/index.d.ts","../node_modules/@multiformats/multiaddr/dist/src/protocols-table.d.ts","../node_modules/@multiformats/multiaddr/dist/src/filter/multiaddr-filter.d.ts","../node_modules/@multiformats/multiaddr/dist/src/index.d.ts","../node_modules/it-stream-types/dist/src/index.d.ts","../node_modules/@libp2p/interface/dist/src/connection/index.d.ts","../node_modules/@libp2p/interface/dist/src/peer-info/index.d.ts","../node_modules/@libp2p/interface/dist/src/content-routing/index.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/buffer/index.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/file.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/filereader.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/index.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/dom-events.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/globals.global.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/@libp2p/interface/dist/src/events.d.ts","../node_modules/@libp2p/interface/dist/src/metrics/index.d.ts","../node_modules/@libp2p/interface/dist/src/peer-routing/index.d.ts","../node_modules/@libp2p/interface/dist/src/peer-store/index.d.ts","../node_modules/@libp2p/interface/dist/src/startable.d.ts","../node_modules/@libp2p/interface/dist/src/stream-handler/index.d.ts","../node_modules/@libp2p/interface/dist/src/topology/index.d.ts","../node_modules/@libp2p/interface/dist/src/stream-muxer/index.d.ts","../node_modules/@libp2p/interface/dist/src/transport/index.d.ts","../node_modules/@libp2p/interface/dist/src/connection-encrypter/index.d.ts","../node_modules/@libp2p/interface/dist/src/connection-gater/index.d.ts","../node_modules/@libp2p/interface/dist/src/keys/index.d.ts","../node_modules/@libp2p/interface/dist/src/peer-discovery/index.d.ts","../node_modules/@libp2p/interface/dist/src/peer-store/tags.d.ts","../node_modules/it-pushable/dist/src/index.d.ts","../node_modules/@libp2p/interface/dist/src/pubsub/index.d.ts","../node_modules/@libp2p/interface/dist/src/record/index.d.ts","../node_modules/@libp2p/interface/dist/src/errors.d.ts","../node_modules/@libp2p/interface/dist/src/index.d.ts","../src/@types/libp2p.ts","../src/nonce.ts","../src/@types/handshake.ts","../src/crypto.ts","../node_modules/it-length-prefixed/dist/src/encode.d.ts","../node_modules/it-reader/dist/src/index.d.ts","../node_modules/it-length-prefixed/dist/src/decode.d.ts","../node_modules/it-length-prefixed/dist/src/index.d.ts","../src/encoder.ts","../src/errors.ts","../node_modules/multiformats/dist/types/src/codecs/interface.d.ts","../node_modules/multiformats/dist/types/src/interface.d.ts","../node_modules/multiformats/dist/types/src/hashes/digest.d.ts","../node_modules/multiformats/dist/types/src/hashes/hasher.d.ts","../node_modules/multiformats/dist/types/src/varint.d.ts","../node_modules/multiformats/dist/types/src/bytes.d.ts","../node_modules/multiformats/dist/types/src/index.d.ts","../node_modules/@libp2p/crypto/dist/src/keys/ed25519-class.d.ts","../node_modules/@libp2p/crypto/dist/src/keys/interface.d.ts","../node_modules/@libp2p/crypto/dist/src/keys/ecdh.d.ts","../node_modules/@libp2p/crypto/dist/src/keys/ephemeral-keys.d.ts","../node_modules/@libp2p/crypto/dist/src/keys/key-stretcher.d.ts","../node_modules/@libp2p/crypto/dist/src/keys/keys.d.ts","../node_modules/@libp2p/crypto/dist/src/keys/rsa-class.d.ts","../node_modules/@libp2p/crypto/dist/src/keys/secp256k1-class.d.ts","../node_modules/@libp2p/crypto/dist/src/keys/index.d.ts","../node_modules/@libp2p/peer-id/dist/src/index.d.ts","../node_modules/uint8arrays/dist/src/concat.d.ts","../node_modules/multiformats/dist/types/src/codecs/raw.d.ts","../node_modules/multiformats/dist/types/src/codecs/json.d.ts","../node_modules/multiformats/dist/types/src/bases/base.d.ts","../node_modules/multiformats/dist/types/src/basics.d.ts","../node_modules/uint8arrays/dist/src/util/bases.d.ts","../node_modules/uint8arrays/dist/src/from-string.d.ts","../src/utils.ts","../node_modules/uint8arrays/dist/src/compare.d.ts","../node_modules/uint8arrays/dist/src/equals.d.ts","../node_modules/uint8arrays/dist/src/to-string.d.ts","../node_modules/uint8arrays/dist/src/xor.d.ts","../node_modules/uint8arrays/dist/src/index.d.ts","../node_modules/it-byte-stream/dist/src/index.d.ts","../node_modules/it-length-prefixed-stream/dist/src/index.d.ts","../node_modules/it-pair/dist/src/duplex.d.ts","../node_modules/it-pipe/dist/src/index.d.ts","../node_modules/@chainsafe/as-chacha20poly1305/lib/src/types.d.ts","../node_modules/@chainsafe/as-chacha20poly1305/lib/src/wasm.d.ts","../node_modules/@chainsafe/as-chacha20poly1305/lib/src/chacha20poly1305.d.ts","../node_modules/@chainsafe/as-chacha20poly1305/lib/src/poly1305.d.ts","../node_modules/@chainsafe/as-chacha20poly1305/lib/src/chacha20.d.ts","../node_modules/@chainsafe/as-chacha20poly1305/lib/src/index.d.ts","../node_modules/@chainsafe/as-sha256/lib/hashobject.d.ts","../node_modules/@chainsafe/as-sha256/lib/wasm.d.ts","../node_modules/@chainsafe/as-sha256/lib/sha256.d.ts","../node_modules/@chainsafe/as-sha256/lib/index.d.ts","../node_modules/wherearewe/dist/src/index.d.ts","../node_modules/@noble/ciphers/utils.d.ts","../node_modules/@noble/ciphers/chacha.d.ts","../node_modules/@noble/curves/abstract/utils.d.ts","../node_modules/@noble/curves/abstract/modular.d.ts","../node_modules/@noble/curves/abstract/curve.d.ts","../node_modules/@noble/curves/abstract/edwards.d.ts","../node_modules/@noble/curves/abstract/hash-to-curve.d.ts","../node_modules/@noble/curves/abstract/montgomery.d.ts","../node_modules/@noble/curves/ed25519.d.ts","../node_modules/@noble/hashes/utils.d.ts","../node_modules/@noble/hashes/hkdf.d.ts","../node_modules/@noble/hashes/_sha2.d.ts","../node_modules/@noble/hashes/sha256.d.ts","../src/crypto/js.ts","../src/crypto/index.ts","../src/@types/handshake-interface.ts","../src/metrics.ts","../src/crypto/streaming.ts","../src/noise.ts","../src/index.ts","../src/handshakes/abstract-handshake.ts","../src/handshakes/xx.ts","../src/logger.ts","../src/handshake-xx.ts","../src/crypto/index.browser.ts","../node_modules/@libp2p/interface-compliance-tests/dist/src/index.d.ts","../node_modules/@libp2p/interface-compliance-tests/dist/src/connection-encryption/index.d.ts","../node_modules/@libp2p/logger/dist/src/index.d.ts","../test/compliance.spec.ts","../node_modules/@types/chai/index.d.ts","../node_modules/@types/chai-as-promised/index.d.ts","../node_modules/chai-parentheses/index.d.ts","../node_modules/@types/chai-subset/index.d.ts","../node_modules/chai-bites/index.d.ts","../node_modules/@types/chai-string/index.d.ts","../node_modules/aegir/dist/utils/chai.d.ts","../node_modules/@types/sinonjs__fake-timers/index.d.ts","../node_modules/@types/sinon/index.d.ts","../node_modules/@libp2p/peer-id-factory/node_modules/@libp2p/interface/dist/src/keys/index.d.ts","../node_modules/@libp2p/peer-id-factory/node_modules/@libp2p/interface/dist/src/peer-id/index.d.ts","../node_modules/@libp2p/peer-id-factory/dist/src/index.d.ts","../test/fixtures/peer.ts","../test/index.spec.ts","../node_modules/@chainsafe/libp2p-yamux/dist/src/config.d.ts","../node_modules/@chainsafe/libp2p-yamux/dist/src/frame.d.ts","../node_modules/@libp2p/utils/dist/src/abstract-stream.d.ts","../node_modules/@chainsafe/libp2p-yamux/dist/src/stream.d.ts","../node_modules/@chainsafe/libp2p-yamux/dist/src/muxer.d.ts","../node_modules/@chainsafe/libp2p-yamux/dist/src/index.d.ts","../node_modules/@libp2p/daemon-protocol/dist/src/index.d.ts","../node_modules/@libp2p/daemon-protocol/dist/src/stream-handler.d.ts","../node_modules/@libp2p/daemon-client/node_modules/@libp2p/interface/dist/src/peer-id/index.d.ts","../node_modules/@libp2p/daemon-client/node_modules/@libp2p/interface/dist/src/peer-info/index.d.ts","../node_modules/@libp2p/daemon-client/dist/src/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/events.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/peer-info/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/content-routing/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/keys/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/peer-id/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/keychain/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/metrics/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/peer-routing/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/peer-store/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/startable.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/stream-handler/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/topology/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/stream-muxer/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/transport/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/connection/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/pubsub/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/logger/dist/src/index.d.ts","../node_modules/protobufjs/index.d.ts","../node_modules/protobufjs/minimal.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/message/rpc.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/message/decoderpc.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/types.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/message-cache.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score-thresholds.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/metrics.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score-params.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/set.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-stats.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/compute-score.d.ts","../node_modules/denque/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/message-deliveries.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/stream.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/tracer.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/config.d.ts","../node_modules/@libp2p/interface-internal/node_modules/@libp2p/interface/dist/src/index.d.ts","../node_modules/@libp2p/interface-internal/node_modules/@libp2p/interface/dist/src/connection/index.d.ts","../node_modules/@libp2p/interface-internal/node_modules/@libp2p/interface/dist/src/peer-id/index.d.ts","../node_modules/@libp2p/interface-internal/node_modules/@libp2p/peer-collections/dist/src/map.d.ts","../node_modules/@libp2p/interface-internal/node_modules/@libp2p/peer-collections/dist/src/set.d.ts","../node_modules/@libp2p/interface-internal/node_modules/@libp2p/peer-collections/dist/src/list.d.ts","../node_modules/@libp2p/interface-internal/node_modules/@libp2p/peer-collections/dist/src/index.d.ts","../node_modules/@libp2p/interface-internal/dist/src/connection-manager/index.d.ts","../node_modules/@libp2p/interface-internal/node_modules/@libp2p/interface/dist/src/topology/index.d.ts","../node_modules/@libp2p/interface-internal/dist/src/registrar/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/index.d.ts","../node_modules/@libp2p/daemon-server/node_modules/@libp2p/interface/dist/src/index.d.ts","../node_modules/@libp2p/daemon-server/node_modules/@libp2p/interface/dist/src/connection/index.d.ts","../node_modules/@libp2p/kad-dht/node_modules/@libp2p/interface/dist/src/peer-id/index.d.ts","../node_modules/@libp2p/kad-dht/node_modules/@libp2p/interface/dist/src/startable.d.ts","../node_modules/interface-datastore/dist/src/key.d.ts","../node_modules/interface-store/dist/src/index.d.ts","../node_modules/interface-datastore/dist/src/index.d.ts","../node_modules/@libp2p/kad-dht/dist/src/providers.d.ts","../node_modules/@libp2p/kad-dht/node_modules/@libp2p/interface/dist/src/index.d.ts","../node_modules/@libp2p/kad-dht/node_modules/@libp2p/interface/dist/src/events.d.ts","../node_modules/@libp2p/kad-dht/node_modules/@libp2p/interface/dist/src/metrics/index.d.ts","../node_modules/@libp2p/kad-dht/node_modules/@libp2p/interface/dist/src/peer-info/index.d.ts","../node_modules/@libp2p/kad-dht/node_modules/@libp2p/interface/dist/src/peer-store/index.d.ts","../node_modules/@libp2p/interface-internal/dist/src/address-manager/index.d.ts","../node_modules/progress-events/dist/src/index.d.ts","../node_modules/@libp2p/kad-dht/dist/src/record/record.d.ts","../node_modules/@libp2p/kad-dht/dist/src/record/index.d.ts","../node_modules/@libp2p/kad-dht/dist/src/index.d.ts","../node_modules/@libp2p/daemon-server/dist/src/index.d.ts","../node_modules/@libp2p/interop/dist/src/connect.d.ts","../node_modules/@libp2p/interop/dist/src/dht/index.d.ts","../node_modules/@libp2p/interop/dist/src/pubsub/index.d.ts","../node_modules/@libp2p/interop/dist/src/relay/index.d.ts","../node_modules/@libp2p/interop/dist/src/streams/index.d.ts","../node_modules/@libp2p/interop/dist/src/index.d.ts","../node_modules/@libp2p/tcp/dist/src/listener.d.ts","../node_modules/@libp2p/tcp/dist/src/index.d.ts","../node_modules/execa/index.d.ts","../node_modules/go-libp2p/dist/src/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/peer-id/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/connection/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/peer-info/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/content-routing/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/events.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/metrics/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/peer-routing/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/peer-store/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/startable.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/stream-handler/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/topology/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/stream-muxer/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/transport/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/connection-encrypter/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/connection-gater/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/keys/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/peer-discovery/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/peer-store/tags.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/pubsub/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/record/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/errors.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface-internal/dist/src/address-manager/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/peer-collections/dist/src/map.d.ts","../node_modules/libp2p/node_modules/@libp2p/peer-collections/dist/src/set.d.ts","../node_modules/libp2p/node_modules/@libp2p/peer-collections/dist/src/list.d.ts","../node_modules/libp2p/node_modules/@libp2p/peer-collections/dist/src/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface-internal/dist/src/connection-manager/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface-internal/dist/src/record/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface-internal/dist/src/registrar/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface-internal/dist/src/transport-manager/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface-internal/dist/src/index.d.ts","../node_modules/libp2p/dist/src/address-manager/index.d.ts","../node_modules/libp2p/dist/src/components.d.ts","../node_modules/libp2p/dist/src/connection-manager/auto-dial.d.ts","../node_modules/libp2p/dist/src/connection-manager/connection-pruner.d.ts","../node_modules/eventemitter3/index.d.ts","../node_modules/p-queue/dist/queue.d.ts","../node_modules/p-queue/dist/options.d.ts","../node_modules/p-queue/dist/priority-queue.d.ts","../node_modules/p-queue/dist/index.d.ts","../node_modules/libp2p/dist/src/connection-manager/dial-queue.d.ts","../node_modules/libp2p/dist/src/connection-manager/index.d.ts","../node_modules/libp2p/dist/src/transport-manager.d.ts","../node_modules/@libp2p/peer-store/node_modules/@libp2p/interface/dist/src/index.d.ts","../node_modules/@libp2p/peer-store/dist/src/index.d.ts","../node_modules/libp2p/dist/src/index.d.ts","../node_modules/p-defer/index.d.ts","../test/interop.ts","../node_modules/iso-random-stream/dist/src/index.d.ts","../node_modules/@libp2p/crypto/dist/src/aes/index.d.ts","../node_modules/@libp2p/crypto/dist/src/hmac/index.d.ts","../node_modules/@libp2p/crypto/dist/src/pbkdf2.d.ts","../node_modules/@libp2p/crypto/dist/src/random-bytes.d.ts","../node_modules/@libp2p/crypto/dist/src/index.d.ts","../test/utils.ts","../test/noise.spec.ts","../test/xx-handshake.spec.ts","../test/handshakes/xx.spec.ts","../node_modules/keyv/src/index.d.ts","../node_modules/@types/http-cache-semantics/index.d.ts","../node_modules/@types/responselike/index.d.ts","../node_modules/@types/cacheable-request/index.d.ts","../node_modules/@types/ms/index.d.ts","../node_modules/@types/debug/index.d.ts","../node_modules/@types/istanbul-lib-coverage/index.d.ts","../node_modules/@types/json-schema/index.d.ts","../node_modules/@types/json5/index.d.ts","../node_modules/@types/keyv/index.d.ts","../node_modules/@types/linkify-it/index.d.ts","../node_modules/@types/mdurl/encode.d.ts","../node_modules/@types/mdurl/decode.d.ts","../node_modules/@types/mdurl/parse.d.ts","../node_modules/@types/mdurl/format.d.ts","../node_modules/@types/mdurl/index.d.ts","../node_modules/@types/markdown-it/lib/common/utils.d.ts","../node_modules/@types/markdown-it/lib/token.d.ts","../node_modules/@types/markdown-it/lib/rules_inline/state_inline.d.ts","../node_modules/@types/markdown-it/lib/helpers/parse_link_label.d.ts","../node_modules/@types/markdown-it/lib/helpers/parse_link_destination.d.ts","../node_modules/@types/markdown-it/lib/helpers/parse_link_title.d.ts","../node_modules/@types/markdown-it/lib/helpers/index.d.ts","../node_modules/@types/markdown-it/lib/ruler.d.ts","../node_modules/@types/markdown-it/lib/rules_block/state_block.d.ts","../node_modules/@types/markdown-it/lib/parser_block.d.ts","../node_modules/@types/markdown-it/lib/rules_core/state_core.d.ts","../node_modules/@types/markdown-it/lib/parser_core.d.ts","../node_modules/@types/markdown-it/lib/parser_inline.d.ts","../node_modules/@types/markdown-it/lib/renderer.d.ts","../node_modules/@types/markdown-it/lib/index.d.ts","../node_modules/@types/markdown-it/index.d.ts","../node_modules/@types/unist/index.d.ts","../node_modules/@types/mdast/index.d.ts","../node_modules/@types/minimatch/index.d.ts","../node_modules/@types/minimist/index.d.ts","../node_modules/@types/mocha/index.d.ts","../node_modules/@types/normalize-package-data/index.d.ts","../node_modules/@types/parse-json/index.d.ts","../node_modules/@types/retry/index.d.ts","../node_modules/@types/semver/classes/semver.d.ts","../node_modules/@types/semver/functions/parse.d.ts","../node_modules/@types/semver/functions/valid.d.ts","../node_modules/@types/semver/functions/clean.d.ts","../node_modules/@types/semver/functions/inc.d.ts","../node_modules/@types/semver/functions/diff.d.ts","../node_modules/@types/semver/functions/major.d.ts","../node_modules/@types/semver/functions/minor.d.ts","../node_modules/@types/semver/functions/patch.d.ts","../node_modules/@types/semver/functions/prerelease.d.ts","../node_modules/@types/semver/functions/compare.d.ts","../node_modules/@types/semver/functions/rcompare.d.ts","../node_modules/@types/semver/functions/compare-loose.d.ts","../node_modules/@types/semver/functions/compare-build.d.ts","../node_modules/@types/semver/functions/sort.d.ts","../node_modules/@types/semver/functions/rsort.d.ts","../node_modules/@types/semver/functions/gt.d.ts","../node_modules/@types/semver/functions/lt.d.ts","../node_modules/@types/semver/functions/eq.d.ts","../node_modules/@types/semver/functions/neq.d.ts","../node_modules/@types/semver/functions/gte.d.ts","../node_modules/@types/semver/functions/lte.d.ts","../node_modules/@types/semver/functions/cmp.d.ts","../node_modules/@types/semver/functions/coerce.d.ts","../node_modules/@types/semver/classes/comparator.d.ts","../node_modules/@types/semver/classes/range.d.ts","../node_modules/@types/semver/functions/satisfies.d.ts","../node_modules/@types/semver/ranges/max-satisfying.d.ts","../node_modules/@types/semver/ranges/min-satisfying.d.ts","../node_modules/@types/semver/ranges/to-comparators.d.ts","../node_modules/@types/semver/ranges/min-version.d.ts","../node_modules/@types/semver/ranges/valid.d.ts","../node_modules/@types/semver/ranges/outside.d.ts","../node_modules/@types/semver/ranges/gtr.d.ts","../node_modules/@types/semver/ranges/ltr.d.ts","../node_modules/@types/semver/ranges/intersects.d.ts","../node_modules/@types/semver/ranges/simplify.d.ts","../node_modules/@types/semver/ranges/subset.d.ts","../node_modules/@types/semver/internals/identifiers.d.ts","../node_modules/@types/semver/index.d.ts","../node_modules/@types/strip-bom/index.d.ts","../node_modules/@types/strip-json-comments/index.d.ts","../node_modules/@types/yargs-parser/index.d.ts","../node_modules/@types/yargs/index.d.ts","../node_modules/@types/yauzl/index.d.ts"],"fileInfos":[{"version":"f33e5332b24c3773e930e212cbb8b6867c8ba3ec4492064ea78e55a524d57450","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","26f2f787e82c4222710f3b676b4d83eb5ad0a72fa7b746f03449e7a026ce5073","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc",{"version":"21e41a76098aa7a191028256e52a726baafd45a925ea5cf0222eb430c96c1d83","affectsGlobalScope":true},{"version":"35299ae4a62086698444a5aaee27fc7aa377c68cbb90b441c9ace246ffd05c97","affectsGlobalScope":true},{"version":"5746fca0ef5189a855357e258108524603574457c811ce8143e3279efde9f5b6","affectsGlobalScope":true},{"version":"138fb588d26538783b78d1e3b2c2cc12d55840b97bf5e08bca7f7a174fbe2f17","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"e0275cd0e42990dc3a16f0b7c8bca3efe87f1c8ad404f80c6db1c7c0b828c59f","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"49ed889be54031e1044af0ad2c603d627b8bda8b50c1a68435fe85583901d072","affectsGlobalScope":true},{"version":"e93d098658ce4f0c8a0779e6cab91d0259efb88a318137f686ad76f8410ca270","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"ec0104fee478075cb5171e5f4e3f23add8e02d845ae0165bfa3f1099241fa2aa","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"acae90d417bee324b1372813b5a00829d31c7eb670d299cd7f8f9a648ac05688","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"51e547984877a62227042850456de71a5c45e7fe86b7c975c6e68896c86fa23b","affectsGlobalScope":true},{"version":"62a4966981264d1f04c44eb0f4b5bdc3d81c1a54725608861e44755aa24ad6a5","affectsGlobalScope":true},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true},{"version":"86a34c7a13de9cabc43161348f663624b56871ed80986e41d214932ddd8d6719","affectsGlobalScope":true},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true},{"version":"50d53ccd31f6667aff66e3d62adf948879a3a16f05d89882d1188084ee415bbc","affectsGlobalScope":true},{"version":"13f6e6380c78e15e140243dc4be2fa546c287c6d61f4729bc2dd7cf449605471","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},{"version":"1bc2fdadc59c4529e51cd693e1bb45c0f9d6c4cf079b008fa3a17da4cd08af44","signature":"a5b2968580425f209992ad1d8a62ab079d84643e00e0f0b11f65fe6423a643f5"},"d35b5db21a04a45ae6323c4d4b25acc983dfe2870fc670fd05249eb19d839a5e",{"version":"a00b40912153391370bfc844161907779723e82cd2d671b3bebea763212f048e","signature":"35095a100857bdbca3c31ddd6e1eb18259140dee0092d97e631889daf084eaec"},"fd617cc8eec6f43227ab572160bac9d23c723073e83a9b100bd15c758eff34c2","ec3786b43d68955ecdb12ce679d3bc61b6b25c4d0ac5bcdaf50fa4a746189b98","3155e98b0df0c1523715e8a1c75c8a67c401aeb58d6eccf8bd89d5d775b8c1cf","fa82b7b22d9df87323e31e9e2ad75911028f3e544647fd212424b3c4452fee3f","90aa0b916eef195a17c3dbd621746f82ac7969ecc3dbf27c81ee4c68c5af7f25","9ceec2a882368c0160a8a3879aa0efce0fb985751fc23ff6191006030969cfa4","cad5d6451789234434c28dd2d6a8267b0d64c479b1ad267321faa31ba90d570b","e0e8254f7a1a21b5768beb4dbc9d4574ce67aefa59d88251d16b17c658f2a69e","c33b700f5d0797c331e08b29f8440204e19cf035555ea9111321f881f1b4702a",{"version":"b2d663f1f5da5b395c5dc6ba6dbc633d61580235f82faaca06bf420fcdae46cf","signature":"6744c64cda78d6af7280d69c20ead828fa4296efe0b582548cb10ab66914993d"},"f997c5be1eb27b8c37d50d3f61fc5671fb79efd80c499e0e16b5d56c32182f8d","e68d682c8224a5c2e5f5e3720537cec720c41a829e1367316ea9acf6fec48ecc","0828334538f604701c9dd0bf54abb758803f9efb4acb4aedd9b18acde4b1bcdf","552223520e823223ee13c5764e9b69b1819c985818a8bcda435d8d1dbd909bee","671efcb4cb21897b43dec53d0218afcac3d1e13c7d50158b0c1a0b300acdb69e","626c33bed7b1e4df8b77660be5853c9e0abecdf3fadbc170368255f0b9fe65cc","5212dd78d1d63ab33332c8846a0ea5ce248159e74033cde16de48373036b4704","d71577e78c7a4257074aaf82f595724175210c89e8b467ef82f949a6cbd891bc","ffaf24e6241a0bd700a6fba3a1390dfb7225a47a4eace0a9d24a00e9bec2b598","c84146dbc9d2e5f43d2cbf15485a4eabf90219dbb66c0d481f20f12d3851bffc","007a764c97d225fd6bf04637aead6879ffe2a9bef665ffda9a7fcef1130a8648","99c24f331c9f4e75a779b9a988e942442db3cf29923ceb820d3bdd4ed1edfef2","822608b61e6599d53757f1e39fa99897261d62ee5daa02e9059bd104b12a790a","efc7d584a33fe3422847783d228f315c4cd1afe74bd7cf8e3f0e4c1125129fef","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","7180c03fd3cb6e22f911ce9ba0f8a7008b1a6ddbe88ccf16a9c8140ef9ac1686","25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","54cb85a47d760da1c13c00add10d26b5118280d44d58e6908d8e89abbd9d7725","3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","a967bfe3ad4e62243eb604bf956101e4c740f5921277c60debaf325c1320bf88","e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","471e1da5a78350bc55ef8cef24eb3aca6174143c281b8b214ca2beda51f5e04a","cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","db3435f3525cd785bf21ec6769bf8da7e8a776be1a99e2e7efb5f244a2ef5fee","c3b170c45fc031db31f782e612adf7314b167e60439d304b49e704010e7bafe5","40383ebef22b943d503c6ce2cb2e060282936b952a01bea5f9f493d5fb487cc7","4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","33203609eba548914dc83ddf6cadbc0bcb6e8ef89f6d648ca0908ae887f9fcc5","0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","9f0a92164925aa37d4a5d9dd3e0134cff8177208dba55fd2310cd74beea40ee2","8bfdb79bf1a9d435ec48d9372dc93291161f152c0865b81fc0b2694aedb4578d","2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","4a0c3504813a3289f7fb1115db13967c8e004aa8e4f8a9021b95285502221bd1",{"version":"cc5e65fb1729463665074b9d7163e78a4225b7af7f3a6b3c74492f415166612f","affectsGlobalScope":true},"cce1f5f86974c1e916ec4a8cab6eec9aa8e31e8148845bf07fbaa8e1d97b1a2c",{"version":"185282b122cbca820c297a02a57b89cf5967ab43e220e3e174d872d3f9a94d2c","affectsGlobalScope":true},"16d74fe4d8e183344d3beb15d48b123c5980ff32ff0cc8c3b96614ddcdf9b239","7b43160a49cf2c6082da0465876c4a0b164e160b81187caeb0a6ca7a281e85ba",{"version":"41fb2a1c108fbf46609ce5a451b7ec78eb9b5ada95fd5b94643e4b26397de0b3","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb","e8968b394e4365588f8f89cfff86435258cf10062585c1d2224627ab92acda22","285e512c7a0db217a0599e18c462d565fa35be4a5153dd7b80bee88c83e83ddf","b5b719a47968cd61a6f83f437236bb6fe22a39223b6620da81ef89f5d7a78fb7","8806ae97308ef26363bd7ec8071bca4d07fb575f905ee3d8a91aff226df6d618","af5bf1db6f1804fb0069039ae77a05d60133c77a2158d9635ea27b6bb2828a8f","b7fe70be794e13d1b7940e318b8770cd1fb3eced7707805318a2e3aaac2c3e9e",{"version":"2c71199d1fc83bf17636ad5bf63a945633406b7b94887612bba4ef027c662b3e","affectsGlobalScope":true},{"version":"7ae9dc7dbb58cd843065639707815df85c044babaa0947116f97bdb824d07204","affectsGlobalScope":true},"7aae1df2053572c2cfc2089a77847aadbb38eedbaa837a846c6a49fb37c6e5bd","313a0b063f5188037db113509de1b934a0e286f14e9479af24fada241435e707","1f758340b027b18ae8773ac3d33a60648a2af49eaae9e4fde18d0a0dd608642c","87ef1a23caa071b07157c72077fa42b86d30568f9dc9e31eed24d5d14fc30ba8","396a8939b5e177542bdf9b5262b4eee85d29851b2d57681fa9d7eae30e225830","21773f5ac69ddf5a05636ba1f50b5239f4f2d27e4420db147fc2f76a5ae598ac",{"version":"dea4c00820d4fac5e530d4842aed2fb20d6744d75a674b95502cbd433f88bcb0","affectsGlobalScope":true},"a5fe4cc622c3bf8e09ababde5f4096ceac53163eefcd95e9cd53f062ff9bb67a","45b1053e691c5af9bfe85060a3e1542835f8d84a7e6e2e77ca305251eda0cb3c","0f05c06ff6196958d76b865ae17245b52d8fe01773626ac3c43214a2458ea7b7",{"version":"0d832a0650a74aafc276cb3f7bb26bde2e2270a6f87e6c871a64122e9203079b","affectsGlobalScope":true},{"version":"c6f3869f12bb5c3bb8ecd0b050ea20342b89b944eae18d313cde6b0ccc0925d7","affectsGlobalScope":true},"8abd0566d2854c4bd1c5e48e05df5c74927187f1541e6770001d9637ac41542e","d742ed2db6d5425b3b6ac5fb1f2e4b1ed2ae74fbeee8d0030d852121a4b05d2f","d8dba11dc34d50cb4202de5effa9a1b296d7a2f4a029eec871f894bddfb6430d","8b71dd18e7e63b6f991b511a201fad7c3bf8d1e0dd98acb5e3d844f335a73634","01d8e1419c84affad359cc240b2b551fb9812b450b4d3d456b64cda8102d4f60","458b216959c231df388a5de9dcbcafd4b4ca563bc3784d706d0455467d7d4942","269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","f8c87b19eae111f8720b0345ab301af8d81add39621b63614dfc2d15fd6f140a","831c22d257717bf2cbb03afe9c4bcffc5ccb8a2074344d4238bf16d3a857bb12",{"version":"2225100373ca3d63bcc7f206e1177152d2e2161285a0bd83c8374db1503a0d1f","affectsGlobalScope":true},{"version":"7052b7b0c3829df3b4985bab2fd74531074b4835d5a7b263b75c82f0916ad62f","affectsGlobalScope":true},"aa34c3aa493d1c699601027c441b9664547c3024f9dbab1639df7701d63d18fa","eefcdf86cefff36e5d87de36a3638ab5f7d16c2b68932be4a72c14bb924e43c1","7c651f8dce91a927ab62925e73f190763574c46098f2b11fb8ddc1b147a6709a","7440ab60f4cb031812940cc38166b8bb6fbf2540cfe599f87c41c08011f0c1df",{"version":"4d0405568cf6e0ff36a4861c4a77e641366feaefa751600b0a4d12a5e8f730a8","affectsGlobalScope":true},{"version":"0ed13c80faeb2b7160bffb4926ff299c468e67a37a645b3ae0917ba0db633c1b","affectsGlobalScope":true},"e393915d3dc385e69c0e2390739c87b2d296a610662eb0b1cb85224e55992250","79bad8541d5779c85e82a9fb119c1fe06af77a71cc40f869d62ad379473d4b75","4a34b074b11c3597fb2ff890bc8f1484375b3b80793ab01f974534808d5777c7",{"version":"629d20681ca284d9e38c0a019f647108f5fe02f9c59ac164d56f5694fc3faf4d","affectsGlobalScope":true},"e7dbf5716d76846c7522e910896c5747b6df1abd538fee8f5291bdc843461795",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"b510d0a18e3db42ac9765d26711083ec1e8b4e21caaca6dc4d25ae6e8623f447","8cc3938ee48298303fe4e97cf6d37e673f5ef328b4399f1f07e799f49288fe2f","8ed569ceee71183d76f430860754926886ba6d2e84ef817a7a40afb85bbcc373","3c0befa6b19c9b71ef0eede9c5a4f189d869363c9ce16a1bedc43029da80b10c","a11fa79b804b6e387126bada8286a400b2a2dcd4df496e5b8efa2d93186adad0","230eb449f719119cab1728252f20ecdd36d7a20cef659e4a51ada1a232a8aaad","85786f052b5dcd0b36564b657a9aea3e80f1fd0e76e4606a4400ec21928892c1","d9ee6bcbf3231a4446de6241fe71967f73d6ae7e7279c5540ee52e1dea4d3114","1bf687d978bdd6d5aff10b9eb0ff0695179f8594d4446946fd0182d6d25fa433","337b83946e5ee461ba8bca2f5e5a6cfdef8e5bb13d20614aeca6f58d6b1a8fc5","f5337c3ea7b8702ffe2718f56a24325a67d517c0d552ef71b8d578d9f33a99d3","7f2cc72a16a663ab9f8d99bd5658e583251ce0c003bf80a948973e15a7ef9596","fb0747c05bf570dbc947b28b51bd26f8a70406084bd7d2a55943004e6bb714e3","c5e9e765e4b8b67155c33afcc09213bb371ddfdfa17e3af18558831d3f0ab000","55e5a976b594dc02f054860fb59a5299872a5b3c8c90e96733a5c9c9d4ed1fb8","fac83d4c6898d5bf90c508cc84409ded40fdc14611cf42d7fb750fb2c7847979","03e385ae2125c9aa9dead008b42a0ab20d0812c26c19ee210d84c2666113f867","cdebdc5861de7a07ddfbd6740a7ad3415068522e19a82bc652ae313c76e4f83d","1d58c629ad80ffc8b5c64d899c33d11e4ee02c8f167781065b89fd1c1f0d6363","33e9ff9d57e93f09c4a5db6da29b09aa6b612678902c05eb3931dbd3c9b43c86",{"version":"01fa05b0061ea6f84c4cc95d88f718b66da773bbf29e8ca06ee194843ad21d62","signature":"22885cbe4178658a1fee62b22429b37f4f7ea89e80b3fc64524a016d96dadd89"},{"version":"2dec630463aaa98bfbc039a798f1757b9d53fd8ebd1722817b05b4534133d8cb","signature":"1cc2659564153cef042b6a377a36a04d861398d678e7032ec42698d8c80ec77f"},{"version":"04c0845e6238ad637b36f880c649580adb0c243f3fa45f4c3807430c8e862933","signature":"da7f4b98c4488238be67d8ddcd4216a17d3d18d96e1d768a8e4fececb1e50c1c"},{"version":"fab3d2f53aff06b666488c99ae8e71334116d7dbe64573e46ce153a535f2112e","signature":"a6918a0b864856bc05c815ce30886c9e50255ccf82f6c7b2977e153c4e8956f5"},"f30cfcfff28ee8f87563225b47239bb07b9b11edd09dda0ea6499b18cca1a30e","0edb8a97ead1fefd337458449050857e80740e31a3f76cffa656262f4e651a50","db8e4b47dd8c22634e3a326e5a5f60aa71a8ad4a0458fc0aadb6951f1c7cdc54","5b7a6d3f5c1b1d94d6cbc6c1e113588e20ae61d583d0d0cb5ec3fd92926d3749",{"version":"57b66a49fde8cfb80495147e1e115f4d09e7d089a97bca210d7b737a9a3dfd40","signature":"7c86832b33e8881089597745da92dc33a29681874849008a13069039bd613ea6"},{"version":"36ca0d441bdf15b8986ad2eb72174ce67226439255956e1edf2fcfabd09bd6df","signature":"8729d2e8372b2d7ae304c08254a34561de5cbe133c02a21dfb7de7db2d8813e4"},"f9e46527ef7833f803a47c256179c05e5149a8dc776c5a6952572052c9e00b24","557b8c7481296f4b7ed362320f3bbb40bb87404edf880c81224f365a8d1e17f3","467a7c09abfde00a7fc41d06c1c599f01e944c9f4948d38a0bde82b766a7e364","7697d44896d7082a0195b088b1a5c49bb70aea87721448982bee34720cfa73f4","77c738b0671d324f6cb2c7c1d7dfc0282a5836c67af55c9ba6df315c62207f57","f2dc47a6b115cd100153d2aaa3dbec094e7a55c5e471c9df8cf7fd651925d63f","2d57b5c1d1ef4cf78480539c0e0650af78ccf387d95f0585b12dbd658691a30f","93a7c98b43d63dc627ddbe2d04499a3e38ef6f243df7fc6505bdb54b9c7fe98a","7a6f74294b8fb90f5e3832be21e25898dd81b2a1adc36dda6929813ba4135311","d25e693302c8e284b417884b40dbadffe693b0daff8999a000995114dbf74c49","a1d4ac1b15cd62c7346d976e3a01e6cbcd4f166ea6b7866907d25c5acc832d77","5d40e6a7071d0d1e6e558e17214ff786ecb3ea73e31b25a88c2cbe2435fa1252","c45242078469b9680653d6a0667b23b1b767ec908825a14bfa8bb1dde2e30dae","91774d65e6f34e378ae8806362efe557a32cd904479f69e29f61102d8baa0c9b","4831b95582d9650a370be00e1893a2cfaa9083f78884c001347e8f85281bd830","2b84036323d8ee148857ecd9a03db53d6183c7bf1511899fc7aec68ad0c1f69b","247152c89cc84294cffacfac67ab3178bb05a8e440e6eff774848c56f35f5680","61aecaffa270848d50da8222593fc396b31ba3b608608f44816b1d30ff105585","88de5467cd5e4c2c1384629806d56ac1215657bddf39ef9f60a0e05beee2b131","ff5820394809bfc32a7e4586ff11b3c07327a0f4c756709aef92f1cd73d6da48","bfe2af20f3ff0579331661ef4c5d2597e0c31a7a0d760e41eaff0502bf064c4d","f52a0e53f79d7fd1c1c55a3cbda59499d4cce75f3188969024cdc286b29ad3ea","e2dd36a524ea5b13de1ed104ede9cea79696588175c1df1940d6a29113a4aee0","ac63a01fcac70315fc9b416e9a57e568b18032c7cfcaa314e1751f03ef71286f",{"version":"2364c07d4efd8f014454d306756e2569f129b915fcddc43a1dd2b4f303426d2f","signature":"479f57a4498698c0ba6a05d1177ae10167c4eb39e7b4f8f7df71893256a44364"},"0eff9792dd66a9aef708b34dd51d2e46158ae518db6ab14f54c5a99e8551abe7","66336b5a5d5e897e932cbf1e306ff8ac8a9929971409a8049c8c8a249cd8b57c","a878d4c7237a7af50e96534295fcf723134d70cbb1e9bfd8365266b912aee6ec","1185e162cb22a9bc3e94b2ae2ba35ed943ee69beae5364b38680f7d8587e7d35","b0e45bb147d111025fccf490ec1a7f58d84c3ae9f58a61313b1010df95e4eeac","4de66b5983d6286bfe3606cf155a5b21043111389d0b4c7b23d3f4282099f7d4","3968eed4d327e075c2386fad0b39b5ad2fe1892f6409a3bb46660c46f58300a6","b1129d7c114eba7c7b155dc809d6371ef86a0738f7ca93b3efef9b796d6168d9","56558ae167446acf230ea2cc072a835309a37ae63d286b484308afd8c504c2d6","ffff3307a2c3797cdc04d7493e94245c13a646194c87f5bf5d2432995b834cc3","a87bc62d9a6be405f53f883a422efd557775224cd2b6688440cd333aaac27169","3d08777d7a3f5c1899a21dc2bd9f0ca80cfe0badba576cae22f5b47b7f81b3eb","bbbfe3163d9421b837e4e203c24243344be38e4359b6fc15426943454d8949b6","8cf4dc652e929c4de69ce5079b98a0683757b2dde66a7cee93edcb5aa08d5c48","f74d877f1fc949fb61197bf32a41829a83ee6aea528787dc2788378baaaa0ecf","a62a02c433e6fee26404825310ad462433320ef2e9f80fa7b9156135fd975f8f","22f15ae5c80b3e795da92636aa03d8f981811d067d82bff01ca54093c0535ec0","b56d4bc83ec01834829979ad57de59b4947cd62f71b102ab0040b6960d5bdc81","a10213415bf98670b026b77a90c7933594f0b5c34bde5b74e80134fdf0331bba","00cd454fa42dca69cdea08d4cb9698e679ba9a31762c23d905e45ba92269ac3a","58765e8e715155b2940e868ab1534b1bfac7087f6b42f7810ef94cc077d62981","f1c4e4db3e1dd83c3749f174e662de845e1217017ead0c15074e3ba00db67b6e","5aaea3d4b3af0c8339006c30af04eafdeb21b0a1bba2f1d32540ade412ee80a7","eb72bbe04857681ebd08a48d3b0869969c335445c31de53a85f76b4a42b97c92","c8cc38cbba80bfd5719c1b9d7efcd76fc90d4497e8a9aa715db426993274f0ae","49b6ff487f2d72569e361f077397214fea20839712527f5fb9ed8bb877dd7db8","d3043c37eeeb10d8a5c0c2a3b9d72e23a5fed2e9a367c5b4154bc8d9283601f3","58ff317d61b47e8fc6688bd50e6770311691202553f119d1e1d79b64d864e200","cde49e6e1ab8a2b4202958e3267e898489b737198a0599c7d251f94d9dea658b","3c3ca314a2b01902ef19b499be6e052925a849f14e2d9185afb323df3d3a72b6","b4b4af7820e7888cf67beeb95d0d6144b3d854370a7b78a598e80dc268e74249","1e7146a407bf85762b80681cd4aa3b544000e30c9b24d04685dfa69f82a48fd9","a3c42863fed9b49c35144d60aa0b2865b5fede65ea0050a28f45381af6dae035",{"version":"0d3eab3df87bf09cba3e05626802e7ca3a41f7d3f7eb6511c638bafd5c52565c","signature":"8db42cde9161c917ae86f075cb21c16d1fab5965db0c4f4b372b4e7a0276f82e"},{"version":"917b6a0feb5eca283fe3a2026c882c836671108d7bc7cdb301b758a9cd761214","signature":"a03bc49af672574771ede656f9c35be60c2ba44f45655aed449e7f9e5efae6aa"},{"version":"2f338ffa300ffbdc665dec11e4f0cb52547a3f76023cfd8795e7a7b839cc141b","signature":"24fbfffb2521234cd9c18aec2f452b3005f53594aebf72e3a59f0264af1e8929"},{"version":"80ec24c6f0a0774c14f6bb39357a99e203067cb93b84dc3c81976c087cd0e517","signature":"6d5444dd0cb480aa3ea38724d56fce8042b24f35007862be9a3b266ad61fa899"},{"version":"ff796a480f4b6a28c4108f386c2c151696cdba5e949148b189be8e6379de8d17","signature":"0abfab39cca2b786d14a621a308538c88dbdba07093283eec1bc6daafc462b3f"},{"version":"d6f180feff7dd524906f076a193b38e006dca07df372cc618905cb8d743b87e1","signature":"f9358258c9ea51d0ad06359665000ede16213ba61c4c77f2d95342eff2914bd3"},{"version":"550b20b25c683729a6f70364b7adb4c58fdfdb0d2b9497a783b084213f61f112","signature":"0f2e27101f71a67dfc93ae737c2dc191b7a7966f7ff18ab49168db181e827d4b"},{"version":"8eb9893ae65f4125c00e6c7c20fb2d629cd45b5392f922c38f1567ba11f4efb8","signature":"b48a6177500ae78755c5787d25a9bf3a3f5553ab519d3654a4a63e127b3b956b"},{"version":"40eb173f4f47d739fc1100db964bcc4c679e896caa83ed5d9ace4ec9528e8c78","signature":"b73dc3c92a3cdfe4144eafad3b73c13787c5cffe4ec5b35cd0467e9a3ede9ec1"},{"version":"a1f3769823c3ce1635c219e0a1b921ddca2845f0fa3190dbce85367a1e99e3ff","signature":"97dfd5d7c0673332fe1548f3b6a112f73571876bbcc0e680f7fc789116b4cea3"},{"version":"f3432e6034a68deae626c1355afbd21fce7d34f07df848c551e2f41f5112c0cb","signature":"18d13ed53b7fc0ccb1f5eefa0f9b3189a9e99339b8a6e27dd542ea6362b0c480"},{"version":"5fe8e2b0c3679a8e6ef41eb84d1ce213cb51d7f68ad2c26ab97801ec28f96183","signature":"3f861c6d92e10f7d80eb0a0a5632d7438d1c0a70006b3b172041fbd5cb9349af"},"5bca2169d85cde638dc45542bb3674c42e5a0eea70ac2737cb48848a0c9e10b4","57dcbdb5305bca37ada1a2e63de06ecec575ccabfb72e7d477a1e315cf6dc0c6","4f3479613b71df319c7bccd0dcfed21a733af3b15f09a6bd2c6898b95f189433",{"version":"2c1344e65cb8fb4df3188a16ef6c25765fc3f7ca79d9647f58d737bc2f5949bf","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"4a2c144ea6f441e9616ec77fe9b1009b0cdf6db0cd9727b8d99623975cd6c693","affectsGlobalScope":true},{"version":"86e56d97b13ef0a58bc9c59aee782ae7d47d63802b5b32129ec5e5d62c20dbfa","affectsGlobalScope":true},{"version":"c1f79c6d85cd84518fd7349588b3c61bdc189f58e3866f925cbf4631c81e31f9","affectsGlobalScope":true},{"version":"54db406753da16e177f094aa66da79840f447de6d87ddd1543a80c9418c52545","affectsGlobalScope":true},{"version":"42f28f4cfca4a70bd89c1d55d76c7978275030b894f6793f36890265c11a83a4","affectsGlobalScope":true},{"version":"7cf1027da9599f056355b46bbea31dbf7f715f797dffb9cbb3402d4490c503e5","affectsGlobalScope":true},"96dbd0787b57ae02981d26d5f2441f0f8444fb46d7578c56527eab89cff13a7d","7d2a0ba1297be385a89b5515b88cd31b4a1eeef5236f710166dc1b36b1741e1b","db0d9343e7723002290ea188ef47650dca80bb651986882220110bb1576f46a2","e1712267198fc3dd7903d0b945d5049fd56d68cadaf986c0adc40235fee43488","3b0253c238cf880be78a88fec2065eb4e3cb7ee1a0d0b02f88bb9468c0c2bf8a","81c6dd936bf342efbb1b1a5440a4300db5d39d70a6ad49ebc91ca7033ae9ce79",{"version":"13acb84a8fa8264d596433ae541c83b13d226a9592e6a26b165002c38132b97a","signature":"e307a4efa11c7f907b4e98ebb9496837e1901f13a19d8b0ed8c51205b09d528f"},{"version":"ac008e94a714c7d53ee34246b03f55c49348c47ae39ce18292c307097bc9710b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"8211eeec7cb8f7b3605df9b4fec52960d4b6f9bce9435ce50e7fd94f143640d4","1633b84fd3346ad6500a88e7a119ac778bb6f6b2746a3b7b8164c5ef2721822f","9546c5c0ab2112ed33b72af30058a5f21e2f3ca00d650b666e20544db57bc10c","47fbed5e984278b46c60b87df76e63d4ea31bf80f29d49cbfb5cd140dd8e0a6e","ccc50fd3a6eecf62f9561be9a02915e1fde20e16457bb5776e34653e12d16b92","4d00cb0cbfca5ad8ceaee993887e618bada234de55a9bbc2adc33192ae57f4c4","be8d072f400254824429edab10acbe595299b702c97b99cc47f8e8018b7102ff","1a319786bea64c944ba8dd33331090034468efbab9c2fb96552850033d62d8d8","3b0253c238cf880be78a88fec2065eb4e3cb7ee1a0d0b02f88bb9468c0c2bf8a","2cd3b80c4762701c0faffcfaa6f9ba62ab7142260eb2de1b9d1c16f79279fe98","33174450482b921bbf093e3d52f501f7f93b5fd612311aa86e7339f2800162aa","b1ed4d62618cc9cee9a264ce3b70421d42219e6451f6a79d4f11019610681109","2cd3b80c4762701c0faffcfaa6f9ba62ab7142260eb2de1b9d1c16f79279fe98","d8b1ae2f0f761c8ce3cb48b8b7c784de8c1ee0eed942be1e895116be031c246d","e1712267198fc3dd7903d0b945d5049fd56d68cadaf986c0adc40235fee43488","3b0253c238cf880be78a88fec2065eb4e3cb7ee1a0d0b02f88bb9468c0c2bf8a","86c8c1efb4a8dc35b6270afbea0699e7d2b593ce4f3d68c3d113366e0dbbe7b5","8ed569ceee71183d76f430860754926886ba6d2e84ef817a7a40afb85bbcc373","650d178c1248e84c587db73065745a62139a3bc6c209a92864f937d08a7ebf34","a11fa79b804b6e387126bada8286a400b2a2dcd4df496e5b8efa2d93186adad0","4b390c96252610ad4f8b618206794b68ddb26ba12a9ef7bc4bbd7a91f7eba079","85786f052b5dcd0b36564b657a9aea3e80f1fd0e76e4606a4400ec21928892c1","903812fa2dee0229a8719dcf99f78864c4982094e543f550835ad4418f32412b","010d5afec4b47ea596f6c59a25ce628fa4e31ea15fd51e73d44ca2d72a780be8","6688472a235825a83c602e9fb0b24f148783314a1c51f2539fcb024bed667967","5558e4604734e02b341074c8ceb8b9cc9cd384927d0afdf611151979674aa50d","c654f65182914e9c6fccea238077f6cfc5619983540f760e72c4fae994ba8a0b","03e385ae2125c9aa9dead008b42a0ab20d0812c26c19ee210d84c2666113f867","fbacab2238e299ccf6596c3bd404c7dcad2c5a88ecd254a8a38cf2d184a67c75","688c9dfd2b7114f5f01022abb5b179659f990d5af5924f185c2644ca99fe7b77","932cade1c5802123b5831f332ad8a6297f0f7d14d0ee04f5a774408f393e2200","925a8770415572378b7b62dcd714e744b7ffed86de59bdbe1d25c68d9d1f7f51","38fc2c990835686053591402bd73803ef28e117fa49427763e62636fd16c76ad","85489033e86eba49bfef2ad7330f8bb57cf7ef6aeb341c00ae1a3e5b19a02f4f","d4936633d5453e441ad5ab182efad46a0e1285fe5f9f5c2948cad3e71b7c2c23","a1b60bd2328318dcbec30bdf529dad31a13315ff2df60c8bd71630c58a575b06","e7ad5aa8eb177708949df3abbfe5ccbe7b75c920fb3bdd89426c38c61f239da6","8cc6a35806cd10d448b0f2ab01fe0b6194ca57fdaced2d71781b68e83c55bd88","8f364fec0ef20506aa9cf00b5cd8b620c1c0389687b11a3a32b0b5d4716ad894","5d11703e2c5d4dbe00bbe79f3bc864d178cf8d6ebccc2d1448ea29e93654f029","f4e82c91aac3b61f3ad04f11a44c5b79f724ff8a09281d0afa24a6624633ff25","ed849d616865076f44a41c87f27698f7cdf230290c44bafc71d7c2bc6919b202","7b8b9017156ef8bf3bbe42785fac8956e5c9869f4a494536d7f548a7c1c7d98a","eb2f08ae9c540a5fb60a5edddc0860ca3dad54ec842301ca73441d9e54534af0","763bb8df872cbb8783e29e19bd7a1dea0f88f7fd7398343af38be8509a65df82","687ce021a76c91c0e0b08fa5b828de2916e1b1aa9a23394e8ebc4dd96b8ee776","c286b410193495d067668bcdbd13ea3f3a39001edff02edee248babf2652e563","ba1405da509cc84896a588978efc45400d4f9844ee738d750b59868b1ad1618a","5558e4604734e02b341074c8ceb8b9cc9cd384927d0afdf611151979674aa50d","c654f65182914e9c6fccea238077f6cfc5619983540f760e72c4fae994ba8a0b","3b0253c238cf880be78a88fec2065eb4e3cb7ee1a0d0b02f88bb9468c0c2bf8a","83a1426ac1a9cf144141dfe10d71a68629623a7c28245c9ca0e0352bead501fd","2726c0a6a4a87fad11e6846e6b0b40b8924fbe66340adc512093c4273bc53e4e","c888daaa99fdf6c5712d98605fdcf21cbbaab756a629661a44cac44ede464d37","e044f60686dc70015a3b7e7c64ad0ac5ec5ec101a0aede0782ec077e136b6a65","a232f867897bbecfebf68df575a417af1afd9b5dd3d83fb4d59e0a133a0de93d","903812fa2dee0229a8719dcf99f78864c4982094e543f550835ad4418f32412b","228dbc8825b7a45af7d416dee95c0a2162d7cf73ffddfd52357b7e548882bdaa","602baeb62ccf84672ba7afacb5a21b675171282397513cac8f06d3a8634f840c","5558e4604734e02b341074c8ceb8b9cc9cd384927d0afdf611151979674aa50d","c654f65182914e9c6fccea238077f6cfc5619983540f760e72c4fae994ba8a0b","3b0253c238cf880be78a88fec2065eb4e3cb7ee1a0d0b02f88bb9468c0c2bf8a","4b390c96252610ad4f8b618206794b68ddb26ba12a9ef7bc4bbd7a91f7eba079","8970ab047d89c71edf9973609dd62f61bb366abeabbff36a1200103b6c1c605b","89dd83418d3c93418929123f21a02434537b5c79ede3c0c6ab5a495d602db155","11705a4aad6e2e724b82ffee6c4fa271d798f0fb68806ace4b1c425c266f8d98","93597e08900c3ac5ec730c16c4fbe425f7342e1f0420967b2afd90d67a2abee1","5558e4604734e02b341074c8ceb8b9cc9cd384927d0afdf611151979674aa50d","b1ed4d62618cc9cee9a264ce3b70421d42219e6451f6a79d4f11019610681109","8ed569ceee71183d76f430860754926886ba6d2e84ef817a7a40afb85bbcc373","2cd3b80c4762701c0faffcfaa6f9ba62ab7142260eb2de1b9d1c16f79279fe98","a11fa79b804b6e387126bada8286a400b2a2dcd4df496e5b8efa2d93186adad0","af89ab13b40dd28cd91818fc6329914d2b9663591831f032ff0f0cb4a028d4a5","6e6733927ade923e34b243d6fbec1465cfc8ed6edf62c6e09ed00c529f0d93de","83b3a9e85f7967509436fcdfa9be9bd543fb54003a9233c5c0af087e4a2c11c8","dc92d6eccf12395aa1d47afb765d5e4a1cd2639a385db0e3e88e9937ad2b63a3","ffb6e0556a4b5323c8bdf12727d000e8a3633f0552fffc4b779ae88546be2770","1242141c87ba3396bead6f379f6d6778bd38d02017f243aa448d1454a5fdc90e","17a4105ddae0308e19ee8532bdeb76278efa9dc644366060ca644541d3fd831c","913ffa031f7455c53e99c75ae130a046612d2ee0e716ed92707e996cbd3952ea","44e897d02326bf4d8169ea9638fe0a4c53b8f85cc48ae2fcbbb67b2f72c1d805","288fb1b9df77067c3c2675bde87d23d4a3f01bb6f929f854f11bdb68662968ff","b43b5156bc2831b46f6226777e292ff1646b3651ce190708b6228a078d42da4a","509c8c515a10704ee72220636b9a2afdd19f254978e23bde45edecbf14c62bc5","3568f0c94a6b9d56ac65cdaae2dc0d6540cdac5609f36fc29a76afee4c8fd775","7153912aee74dbd20f46243e78fa37d014ba38ac7b3458709fa74b6ac0e96fcf","32cbe201bfe8ed7f4c323fb8a3fcfdfb451f22e84d3c49da33ceda2fbf9230be","50d536e2e8bdbb4234b6ade05992aa4227fbf0401aba24922734c3ddb4a3ff11","626c33bed7b1e4df8b77660be5853c9e0abecdf3fadbc170368255f0b9fe65cc","007a764c97d225fd6bf04637aead6879ffe2a9bef665ffda9a7fcef1130a8648","99c24f331c9f4e75a779b9a988e942442db3cf29923ceb820d3bdd4ed1edfef2","822608b61e6599d53757f1e39fa99897261d62ee5daa02e9059bd104b12a790a","8cc3938ee48298303fe4e97cf6d37e673f5ef328b4399f1f07e799f49288fe2f","8ed569ceee71183d76f430860754926886ba6d2e84ef817a7a40afb85bbcc373","3c0befa6b19c9b71ef0eede9c5a4f189d869363c9ce16a1bedc43029da80b10c","a11fa79b804b6e387126bada8286a400b2a2dcd4df496e5b8efa2d93186adad0","230eb449f719119cab1728252f20ecdd36d7a20cef659e4a51ada1a232a8aaad","85786f052b5dcd0b36564b657a9aea3e80f1fd0e76e4606a4400ec21928892c1","d9ee6bcbf3231a4446de6241fe71967f73d6ae7e7279c5540ee52e1dea4d3114","1bf687d978bdd6d5aff10b9eb0ff0695179f8594d4446946fd0182d6d25fa433","337b83946e5ee461ba8bca2f5e5a6cfdef8e5bb13d20614aeca6f58d6b1a8fc5","f5337c3ea7b8702ffe2718f56a24325a67d517c0d552ef71b8d578d9f33a99d3","7f2cc72a16a663ab9f8d99bd5658e583251ce0c003bf80a948973e15a7ef9596","fb0747c05bf570dbc947b28b51bd26f8a70406084bd7d2a55943004e6bb714e3","c5e9e765e4b8b67155c33afcc09213bb371ddfdfa17e3af18558831d3f0ab000","55e5a976b594dc02f054860fb59a5299872a5b3c8c90e96733a5c9c9d4ed1fb8","03e385ae2125c9aa9dead008b42a0ab20d0812c26c19ee210d84c2666113f867","cdebdc5861de7a07ddfbd6740a7ad3415068522e19a82bc652ae313c76e4f83d","1d58c629ad80ffc8b5c64d899c33d11e4ee02c8f167781065b89fd1c1f0d6363","33e9ff9d57e93f09c4a5db6da29b09aa6b612678902c05eb3931dbd3c9b43c86","af89ab13b40dd28cd91818fc6329914d2b9663591831f032ff0f0cb4a028d4a5","872c16fa4b9e4f65351129c31748eb5b0c2ecf4e21f31c5191b0d88a4247c392","8aabd3f6612df92a210227e6cad3797bf8786cdedc7255c6eeac551c5f334a86","47761b52895d263dc6da72ce4b8f85f088c2659fff9e2fbad992d47f767d38e6","733b7f04fe4048b4b6192f7c7c0c51500930c8a1adf2bb549952a38f6713bd55","c97bd188967aec440612a54af4dd6289134f1d96bc8d5ca7463603c010f3719d","ef6e6d838cc600162626a53167046484f38e9a4bab9454e72350bed76c497228","8adf9a02b0c2508f81516b561a6c8080ea2169126f166e39767bcb5389b9cfbc","e9c4245bbf5a7d7773b8ec2c3cda931333cdd1a1cfcb67e3165160c1a14d7d68","643dcc834b6d8e8f6929de74c6afc11739d19afbcd53a75b3d79d401d885f334","447d3c90ddd4ca1a84c357682ee533766720dcef1e040c720d266afa64b223d7","1c65a7a7dfdc8a54b4417445c8364760377353f751023d87be5f08d02b7b3a60","1cd40e2f37323f632ea66c527ff7716f63d995f93ed0d2f92249200c223affd4","5a1ffbe813678cd26a88d802d317005bc8f39aef35d822aeb80572773a9171d4","27679e96d1bd38c5938178aaf4abe8627493090b63d6bae2ce8436e6a87ebe4d","a77fbecee25688f568e18b43f8f54195d6c278a2a9a687ada5ab3d2f726524eb","e29f2b3a93ca3392fe29fa8e7b93985e854b44fe28e2b5c113f08296095bd6b7","d27956c8b392088a06d882e1edb58aab4d5cf5ab1229b73f99329ab21f352147","d643518d0b08b3d8d6e7f1fa884bca57ef95caaa1c312abbd9e1d4ed0d51c370","0c0b5cff24ebe9d0f7dc9a348dd9dbb76092efd8bf2fd391b6bbcbc6b6293564","b44b5f8ef73256034392f4d16fc3b43cf88df9d5845ecce49a6cd978b775a767","c29cf47a3bf95c8e569e374d684177b3cfde5725362d732de97c7d5959a746f4","33e9ff9d57e93f09c4a5db6da29b09aa6b612678902c05eb3931dbd3c9b43c86","cbe00d8364e32d303295626453f095d09e8ff700281c582922bf32e1def473ee","be53c9014386b636953e20860482b6aa7705620899ab2e1f1683bfa580ab3bad","acd5d501223e3a7cdd229b501fce5fb071937b72bd05fa33e543eb21c8ee0aba",{"version":"4de1a7fb21a284ac1c5d6c338b72de5dcc5bbac750ec7c881d24ace669a55c7b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"6e0011406961ab3d469f2a7c3fddc41a5c9fb6d9452c47b5389124da846ab07a","eb0496ba7f7223a95a7ec44618cb789c49a521bdf9372506c2ae48e5adb71035","a4f27ea63e3ff26a94b6681967a5276a2df9ddb80ae990df1ad03c0fffb34eca","18418f70457cee30da01c21bc26869ceb1ae65564784136f7fe2f7f2ff8f740f","3d2ec84143e6462a786b5d9ecf06f4f6f67a59a1f16c5a3a5e41721ba8478b7f","892f412f701d356f85cd3cb7d48b87ffecc0d4f85a2005c1d53e5e08414df8b1",{"version":"14261c0d2da587df791a696c8272003a3c5c1d7dd3a91f459092a8ab99759ca3","signature":"23d9dffba690dd7b1cc3986e0d592011a8660f0cb7632037b83b157b659c1510"},{"version":"07f1ae9181990dd05d21d95900f7bbe636644aa5db131546dd89da5b5050d149","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e2230438fe21ba6ccd9012bf36ea2e90955303f3208f9706f7847e3e1a8876c0","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"236a4fedeca1fd5adeea1f56e17463fb0b800de94be040ae7fcc44fe3533349f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"42baf4ca38c38deaf411ea73f37bc39ff56c6e5c761a968b64ac1b25c92b5cd8","d7dbe0ad36bdca8a6ecf143422a48e72cc8927bab7b23a1a2485c2f78a7022c6","8718fa41d7cf4aa91de4e8f164c90f88e0bf343aa92a1b9b725a9c675c64e16b","f992cd6cc0bcbaa4e6c810468c90f2d8595f8c6c3cf050c806397d3de8585562","68cc8d6fcc2f270d7108f02f3ebc59480a54615be3e09a47e14527f349e9d53e","3eb11dbf3489064a47a2e1cf9d261b1f100ef0b3b50ffca6c44dd99d6dd81ac1","035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","fec943fdb3275eb6e006b35e04a8e2e99e9adf3f4b969ddf15315ac7575a93e4","d58289beaadf0380170b0063569e1a01c60ee6b8f2dc3cccfff4fd965154d555","f313731860257325f13351575f381fef333d4dfe30daf5a2e72f894208feea08","951b37f7d86f6012f09e6b35f1de57c69d75f16908cb0adaa56b93675ea0b853","a45efe8e9134ef64a5e3825944bc16fffaf130b82943844523d7a7f7c1fd91b2","969aa6509a994f4f3b09b99d5d29484d8d52a2522e133ef9b4e54af9a3e9feaf","f1ceb4cbff7fc122b13f8a43e4d60e279a174c93420b2d2f76a6c8ce87934d7f","0f9e381eecc5860f693c31fe463b3ca20a64ca9b8db0cf6208cd4a053f064809","95902d5561c6aac5dfc40568a12b0aca324037749dcd32a81f23423bfde69bab","5dfb2aca4136abdc5a2740f14be8134a6e6b66fd53470bb2e954e40f8abfaf3e","577463167dd69bd81f76697dfc3f7b22b77a6152f60a602a9218e52e3183ad67","b8396e9024d554b611cbe31a024b176ba7116063d19354b5a02dccd8f0118989","4b28e1c5bf88d891e07a1403358b81a51b3ba2eae1ffada51cca7476b5ac6407","7150ad575d28bf98fae321a1c0f10ad17b127927811f488ded6ff1d88d4244e5","8b155c4757d197969553de3762c8d23d5866710301de41e1b66b97c9ed867003","93733466609dd8bf72eace502a24ca7574bd073d934216e628f1b615c8d3cb3c","45e9228761aabcadb79c82fb3008523db334491525bdb8e74e0f26eaf7a4f7f4","aeacac2778c9821512b6b889da79ac31606a863610c8f28da1e483579627bf90","569fdb354062fc098a6a3ba93a029edf22d6fe480cf72b231b3c07832b2e7c97","bf9876e62fb7f4237deafab8c7444770ef6e82b4cad2d5dc768664ff340feeb2","6cf60e76d37faf0fbc2f80a873eab0fd545f6b1bf300e7f0823f956ddb3083e9","6adaa6103086f931e3eee20f0987e86e8879e9d13aa6bd6075ccfc58b9c5681c","ee0af0f2b8d3b4d0baf669f2ff6fcef4a8816a473c894cc7c905029f7505fed0","89121c1bf2990f5219bfd802a3e7fc557de447c62058d6af68d6b6348d64499a","1af1f2c02132bafa25c4c4b7c415e0a59ba959d6db6bd1800a43fb5d943e3f77","8841e2aa774b89bd23302dede20663306dc1b9902431ac64b24be8b8d0e3f649","fbca5ffaebf282ec3cdac47b0d1d4a138a8b0bb32105251a38acb235087d3318",{"version":"0ea93d01083b3d5863cc98cb589b5d0eac55d14417487f9e5e455dfa0b17c660","affectsGlobalScope":true},"22293bd6fa12747929f8dfca3ec1684a3fe08638aa18023dd286ab337e88a592","916be7d770b0ae0406be9486ac12eb9825f21514961dd050594c4b250617d5a8","510616459e6edd01acbce333fb256e06bdffdad43ca233a9090164bf8bb83912","5b5337f28573ffdbc95c3653c4a7961d0f02fdf4788888253bf74a3b5a05443e","9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","85f8ebd7f245e8bf29da270e8b53dcdd17528826ffd27176c5fc7e426213ef5a","4006c872e38a2c4e09c593bc0cdd32b7b4f5c4843910bea0def631c483fff6c5","ab6aa3a65d473871ee093e3b7b71ed0f9c69e07d1d4295f45c9efd91a771241d","bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","5d30d04a14ed8527ac5d654dc345a4db11b593334c11a65efb6e4facc5484a0e","74d5a87c3616cd5d8691059d531504403aa857e09cbaecb1c64dfb9ace0db185"],"root":[61,63,73,[193,196],201,202,227,[261,272],276,289,290,427,[434,437]],"options":{"allowJs":true,"checkJs":true,"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":false,"esModuleInterop":true,"module":7,"noEmitOnError":true,"noFallthroughCasesInSwitch":true,"noImplicitReturns":false,"noUnusedLocals":true,"noUnusedParameters":false,"outDir":"./","removeComments":false,"skipLibCheck":true,"sourceMap":true,"strict":true,"stripInternal":true,"target":9},"fileIdsList":[[166,237],[166,237,238],[166,238,239,240,241],[166,238],[166],[166,243,245],[166,244],[166,287,302,310,318,319,322,323,324,325,327,335,336,337,338,346,348],[166,322,324],[166,321,322],[166,320],[166,318,322,324,326],[166,328,330],[166,326,328,334],[166,332],[166,324,327,328,329,330,331,333],[166,324],[62,166,317],[166,324,327],[82,166,286,287,318,322],[62,82,83,166,287,316],[78,166,300,316],[136,166,173],[82,166,287,300,302,304,307,308,309,310,311,312,313,315,317],[74,166,286,287],[166,317],[76,78,166],[82,166,287],[166,287,300,316],[62,166,188,287,302,317],[62,83,166,316,317],[166,287,317],[82,166,302,314,316,317],[166,287],[166,192,292,295],[62,83,166,188,192,291,292,294,296],[62,166,192,291,292,293],[166,218,429,430,431,432],[166,211],[62,166,209],[166,212],[166,192,210,213,214,215,216,217],[62,71,166],[62,78,82,83,166,287,297,298,300],[62,83,166],[82,166,297,316,317,349,367],[166,192,273],[82,166],[82,166,287,316,317,345],[166,313,317],[166,342,343,344],[62,79,83,84,166],[79,82,84,166],[62,79,82,83,166,192],[78,85,166,192],[79,82,84,85,86,166,174,175,176,177,178,179,180,181,182,183,184,185,186,187,189,190,191],[62,166],[84,166],[85,166,174],[79,82,166],[79,85,166,192],[62,79,84,166,174,188],[62,79,166],[62,83,84,166,192],[79,84,166],[82,84,166,174,181,192],[166,374],[166,301,369,370,371,372,373],[78,166,287,300,302,308,310,316,346,348,356,357,363,364,366],[166,209,287,311,356],[62,166,365],[136,166],[166,192],[166,286,287],[74,76,78,166,192],[82,166,356,400],[82,166,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399],[82,166,192,375],[82,166,192,376],[62,83,166,192,275],[80,81,166],[166,248],[166,251],[166,250,251,252],[166,250,252,253,254,255],[166,257],[166,257,259],[136,139,165,166,173,438,439,440],[166,277],[166,442],[166,468],[166,453],[166,457,458,459],[166,456],[166,458],[166,448,454,455,460,463,465,466,467],[166,455,461,462,468],[166,461,464],[166,455,456,461,468],[166,455,468],[166,470],[166,449,450,451,452],[87,166],[123,166],[124,129,157,166],[125,136,137,144,154,165,166],[125,126,136,144,166],[127,166],[128,129,137,145,166],[129,154,162,166],[130,132,136,144,166],[131,166],[132,133,166],[134,136,166],[123,136,166],[136,137,138,154,165,166],[136,137,138,151,154,157,166],[121,124,166,170],[132,136,139,144,154,165,166],[136,137,139,140,144,154,162,165,166],[139,141,154,162,165,166],[87,88,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172],[136,142,166],[143,165,166,170],[132,136,144,154,166],[145,166],[146,166],[123,147,166],[148,164,166,170],[149,166],[150,166],[136,151,152,166],[151,153,166,168],[124,136,154,155,156,157,166],[124,154,156,166],[154,155,166],[157,166],[158,166],[123,154,166],[136,160,161,166],[160,161,166],[129,144,154,162,166],[163,166],[144,164,166],[124,139,150,165,166],[129,166],[154,166,167],[143,166,168],[166,169],[124,129,136,138,147,154,165,166,168,170],[154,166,171],[139,154,166,173],[166,478,517],[166,478,502,517],[166,517],[166,478],[166,478,503,517],[166,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516],[166,503,517],[166,284],[166,520],[136,154,166,173],[166,277,278,279,280,281,282],[166,277,278],[124,125,154,166],[166,354,355],[166,230],[62,83,166,200,233],[62,83,166,198,200],[62,83,166,200],[62,166,197,199],[83,166],[82,166,400,410],[166,356,400,410],[166,400,410],[82,166,400,405,410,419],[82,166,400,405,410,413,414,420],[166,356,400,411,412,421,422,424],[82,166,400,405],[166,401,406,407,408,409],[62,166,400],[166,400],[82,166,400],[62,83,166,379,380],[82,166,379,380],[62,82,83,166,379,400],[78,166,381,400],[166,380],[166,381,383],[82,166,379],[166,379,381,400],[62,166,188,379,380,383],[62,166,379],[62,83,166,380,400],[166,379,380],[82,166,380,383,390,400],[166,402,403,404],[74,166],[166,209,221,222,223],[77,78,166],[77,166],[75,166],[166,203],[76,166],[76,166,205],[78,166,204,205,206,207,208],[74,75,76,77,166,203],[74,75,76,166],[166,415,416,417,418],[166,416],[166,416,417],[71,166],[64,166],[64,71,166],[62,64,166],[64,65,66,67,68,69,70,166],[166,225],[166,220,225,226,228,229,230,231],[166,209,224],[98,102,165,166],[98,154,165,166],[93,166],[95,98,162,165,166],[144,162,166],[166,173],[93,166,173],[95,98,144,165,166],[90,91,94,97,124,136,154,165,166],[90,96,166],[94,98,124,157,165,166,173],[124,166,173],[114,124,166,173],[92,93,166,173],[98,166],[92,93,94,95,96,97,98,99,100,102,103,104,105,106,107,108,109,110,111,112,113,115,116,117,118,119,120,166],[98,105,106,166],[96,98,106,107,166],[97,166],[90,93,98,166],[98,102,106,107,166],[102,166],[96,98,101,165,166],[90,95,96,98,102,105,166],[124,154,166],[93,98,114,124,166,170,173],[62,73,166,192,195],[62,63,166,193,194],[63,73,166,192],[62,63,166,193,195],[166,261],[62,129,166,193,196,242,246,247,261],[62,63,166,193,195,196,249,256,258,260],[61,62,72,83,166,201,263,264],[62,63,72,166,195,200],[62,63,72,73,166,192,193,195,196,201,202,227,234,263,267,269,270],[62,63,72,166,192,194,195,196,229,232,267],[62,63,72,166,193,195,227,268],[73,166,192,196,261,266],[61,62,166,192,193,195,230],[61,62,63,72,73,83,166,192,193,196,200,201,227,234,235,236,262,263,264,265,267,271],[63,72,166],[62,71,72,166],[62,63,73,166,192,218,219,220,226],[166,266,274,275],[79,166,288],[124,166,193,195,227,229,230,261,269,275,283,434],[62,166,175,226,234,235,266,267,275,283,285,289],[79,82,137,166,218,219,267,275,296,301,368,374,376,377,378,425,426],[61,62,79,124,166,201,226,227,229,230,233,234,235,261,266,269,271,275,283,285,289,428,434],[79,166,185,193,433],[79,124,166,227,229,234,235,262,271,275,283,289],[62,73,192,195],[62,63,193,194],[63,73,192],[62,63,193,195],[196],[62,83,263,264],[62,63,195,200],[62,63,73,192,193,195,196,234,263,267,269],[62,63,194,195,196,267],[63,193,195,268],[73,192,196,261,266],[62,192,193,195],[192],[62,63,73,83,192,193,196,267],[63],[62,71],[62,63,73,192],[79],[79,185,193]],"referencedMap":[[241,1],[239,2],[242,3],[240,4],[237,5],[238,5],[243,5],[246,6],[245,7],[244,5],[338,5],[349,8],[325,9],[323,10],[322,11],[327,12],[331,13],[335,14],[333,15],[328,5],[326,5],[334,16],[330,17],[336,18],[337,19],[324,20],[329,5],[317,21],[304,22],[302,23],[316,24],[307,25],[305,5],[308,26],[306,27],[303,28],[309,29],[310,28],[318,30],[311,5],[312,26],[314,31],[313,32],[315,33],[319,34],[291,5],[292,5],[296,35],[295,36],[294,37],[429,5],[430,5],[433,38],[212,39],[210,40],[213,41],[218,42],[211,5],[214,39],[215,43],[216,40],[217,40],[431,5],[432,5],[301,44],[299,27],[300,28],[297,43],[298,45],[368,46],[351,21],[350,24],[274,47],[273,5],[363,48],[346,49],[348,50],[340,21],[339,24],[341,27],[347,32],[345,51],[344,34],[342,34],[343,34],[183,52],[184,53],[84,54],[86,55],[191,5],[174,23],[192,56],[185,57],[175,58],[186,59],[79,27],[85,60],[176,61],[177,60],[187,5],[189,62],[190,63],[178,5],[179,58],[181,64],[180,65],[182,66],[369,67],[370,67],[374,68],[371,67],[372,67],[373,67],[367,69],[357,70],[366,71],[365,43],[359,72],[358,24],[360,26],[352,27],[361,28],[362,28],[353,5],[275,73],[288,74],[286,5],[287,27],[219,75],[424,76],[423,77],[376,78],[375,79],[293,80],[81,48],[82,81],[80,48],[249,82],[248,5],[252,83],[253,84],[254,84],[251,5],[255,5],[250,5],[256,85],[259,86],[258,86],[260,87],[257,5],[441,88],[278,89],[282,89],[280,89],[277,5],[443,90],[439,5],[444,5],[445,5],[446,5],[447,23],[448,5],[469,91],[454,92],[460,93],[458,5],[457,94],[459,95],[468,96],[463,97],[465,98],[466,99],[467,100],[461,5],[462,100],[464,100],[456,100],[455,5],[471,101],[450,5],[449,5],[452,92],[453,102],[451,92],[472,5],[473,5],[474,5],[442,5],[87,103],[88,103],[123,104],[124,105],[125,106],[126,107],[127,108],[128,109],[129,110],[130,111],[131,112],[132,113],[133,113],[135,72],[134,114],[136,115],[137,116],[138,117],[122,118],[172,5],[139,119],[140,120],[141,121],[173,122],[142,123],[143,124],[144,125],[145,126],[146,127],[147,128],[148,129],[149,130],[150,131],[151,132],[152,132],[153,133],[154,134],[156,135],[155,136],[157,137],[158,138],[159,139],[160,140],[161,141],[162,142],[163,143],[164,144],[165,145],[166,146],[167,147],[168,148],[169,149],[170,150],[171,151],[475,5],[476,5],[440,152],[477,5],[502,153],[503,154],[478,155],[481,155],[500,153],[501,153],[491,153],[490,156],[488,153],[483,153],[496,153],[494,153],[498,153],[482,153],[495,153],[499,153],[484,153],[485,153],[497,153],[479,153],[486,153],[487,153],[489,153],[493,153],[504,157],[492,153],[480,153],[517,158],[516,5],[511,157],[513,159],[512,157],[505,157],[506,157],[508,157],[510,157],[514,159],[515,159],[507,159],[509,159],[285,160],[284,5],[518,5],[519,5],[470,5],[520,5],[521,161],[522,162],[283,163],[89,5],[281,89],[279,164],[332,5],[415,5],[377,165],[378,5],[356,166],[354,167],[355,5],[428,5],[233,45],[234,168],[199,169],[197,170],[200,171],[235,172],[236,172],[188,5],[198,45],[83,5],[438,72],[411,173],[412,174],[413,175],[414,173],[420,176],[421,177],[425,178],[422,173],[401,48],[406,179],[410,180],[407,181],[408,182],[409,183],[392,184],[393,185],[380,186],[382,187],[399,5],[383,23],[400,77],[394,57],[384,188],[395,189],[379,27],[381,190],[385,191],[386,190],[396,5],[397,192],[398,193],[387,5],[388,188],[390,194],[389,195],[391,196],[405,197],[404,182],[402,182],[403,182],[223,198],[74,5],[224,199],[75,200],[208,5],[78,201],[203,202],[222,203],[221,203],[205,204],[206,205],[76,5],[209,206],[204,207],[77,208],[207,5],[426,5],[419,209],[417,210],[418,211],[416,5],[364,5],[320,5],[321,11],[64,212],[67,213],[68,214],[65,215],[66,213],[71,216],[69,43],[70,212],[59,5],[60,5],[10,5],[11,5],[14,5],[13,5],[2,5],[15,5],[16,5],[17,5],[18,5],[19,5],[20,5],[21,5],[22,5],[3,5],[4,5],[23,5],[27,5],[24,5],[25,5],[26,5],[28,5],[29,5],[30,5],[5,5],[31,5],[32,5],[33,5],[34,5],[6,5],[38,5],[35,5],[36,5],[37,5],[39,5],[7,5],[40,5],[45,5],[46,5],[41,5],[42,5],[43,5],[44,5],[8,5],[50,5],[47,5],[48,5],[49,5],[51,5],[9,5],[52,5],[53,5],[54,5],[57,5],[55,5],[56,5],[1,5],[58,5],[12,5],[62,5],[72,5],[228,5],[220,5],[229,5],[226,217],[232,218],[230,217],[225,219],[231,5],[105,220],[112,221],[104,220],[119,222],[96,223],[95,224],[118,225],[113,226],[116,227],[98,228],[97,229],[93,230],[92,231],[115,232],[94,233],[99,234],[100,5],[103,234],[90,5],[121,235],[120,234],[107,236],[108,237],[110,238],[106,239],[109,240],[114,225],[101,241],[102,242],[111,243],[91,244],[117,245],[247,5],[63,5],[263,246],[195,247],[193,248],[61,5],[196,249],[272,250],[262,251],[261,252],[265,253],[201,254],[202,5],[271,255],[268,256],[269,257],[267,258],[270,259],[264,73],[266,260],[194,261],[73,262],[227,263],[276,264],[289,265],[437,266],[290,267],[427,268],[435,269],[434,270],[436,271]],"exportedModulesMap":[[241,1],[239,2],[242,3],[240,4],[237,5],[238,5],[243,5],[246,6],[245,7],[244,5],[338,5],[349,8],[325,9],[323,10],[322,11],[327,12],[331,13],[335,14],[333,15],[328,5],[326,5],[334,16],[330,17],[336,18],[337,19],[324,20],[329,5],[317,21],[304,22],[302,23],[316,24],[307,25],[305,5],[308,26],[306,27],[303,28],[309,29],[310,28],[318,30],[311,5],[312,26],[314,31],[313,32],[315,33],[319,34],[291,5],[292,5],[296,35],[295,36],[294,37],[429,5],[430,5],[433,38],[212,39],[210,40],[213,41],[218,42],[211,5],[214,39],[215,43],[216,40],[217,40],[431,5],[432,5],[301,44],[299,27],[300,28],[297,43],[298,45],[368,46],[351,21],[350,24],[274,47],[273,5],[363,48],[346,49],[348,50],[340,21],[339,24],[341,27],[347,32],[345,51],[344,34],[342,34],[343,34],[183,52],[184,53],[84,54],[86,55],[191,5],[174,23],[192,56],[185,57],[175,58],[186,59],[79,27],[85,60],[176,61],[177,60],[187,5],[189,62],[190,63],[178,5],[179,58],[181,64],[180,65],[182,66],[369,67],[370,67],[374,68],[371,67],[372,67],[373,67],[367,69],[357,70],[366,71],[365,43],[359,72],[358,24],[360,26],[352,27],[361,28],[362,28],[353,5],[275,73],[288,74],[286,5],[287,27],[219,75],[424,76],[423,77],[376,78],[375,79],[293,80],[81,48],[82,81],[80,48],[249,82],[248,5],[252,83],[253,84],[254,84],[251,5],[255,5],[250,5],[256,85],[259,86],[258,86],[260,87],[257,5],[441,88],[278,89],[282,89],[280,89],[277,5],[443,90],[439,5],[444,5],[445,5],[446,5],[447,23],[448,5],[469,91],[454,92],[460,93],[458,5],[457,94],[459,95],[468,96],[463,97],[465,98],[466,99],[467,100],[461,5],[462,100],[464,100],[456,100],[455,5],[471,101],[450,5],[449,5],[452,92],[453,102],[451,92],[472,5],[473,5],[474,5],[442,5],[87,103],[88,103],[123,104],[124,105],[125,106],[126,107],[127,108],[128,109],[129,110],[130,111],[131,112],[132,113],[133,113],[135,72],[134,114],[136,115],[137,116],[138,117],[122,118],[172,5],[139,119],[140,120],[141,121],[173,122],[142,123],[143,124],[144,125],[145,126],[146,127],[147,128],[148,129],[149,130],[150,131],[151,132],[152,132],[153,133],[154,134],[156,135],[155,136],[157,137],[158,138],[159,139],[160,140],[161,141],[162,142],[163,143],[164,144],[165,145],[166,146],[167,147],[168,148],[169,149],[170,150],[171,151],[475,5],[476,5],[440,152],[477,5],[502,153],[503,154],[478,155],[481,155],[500,153],[501,153],[491,153],[490,156],[488,153],[483,153],[496,153],[494,153],[498,153],[482,153],[495,153],[499,153],[484,153],[485,153],[497,153],[479,153],[486,153],[487,153],[489,153],[493,153],[504,157],[492,153],[480,153],[517,158],[516,5],[511,157],[513,159],[512,157],[505,157],[506,157],[508,157],[510,157],[514,159],[515,159],[507,159],[509,159],[285,160],[284,5],[518,5],[519,5],[470,5],[520,5],[521,161],[522,162],[283,163],[89,5],[281,89],[279,164],[332,5],[415,5],[377,165],[378,5],[356,166],[354,167],[355,5],[428,5],[233,45],[234,168],[199,169],[197,170],[200,171],[235,172],[236,172],[188,5],[198,45],[83,5],[438,72],[411,173],[412,174],[413,175],[414,173],[420,176],[421,177],[425,178],[422,173],[401,48],[406,179],[410,180],[407,181],[408,182],[409,183],[392,184],[393,185],[380,186],[382,187],[399,5],[383,23],[400,77],[394,57],[384,188],[395,189],[379,27],[381,190],[385,191],[386,190],[396,5],[397,192],[398,193],[387,5],[388,188],[390,194],[389,195],[391,196],[405,197],[404,182],[402,182],[403,182],[223,198],[74,5],[224,199],[75,200],[208,5],[78,201],[203,202],[222,203],[221,203],[205,204],[206,205],[76,5],[209,206],[204,207],[77,208],[207,5],[426,5],[419,209],[417,210],[418,211],[416,5],[364,5],[320,5],[321,11],[64,212],[67,213],[68,214],[65,215],[66,213],[71,216],[69,43],[70,212],[59,5],[60,5],[10,5],[11,5],[14,5],[13,5],[2,5],[15,5],[16,5],[17,5],[18,5],[19,5],[20,5],[21,5],[22,5],[3,5],[4,5],[23,5],[27,5],[24,5],[25,5],[26,5],[28,5],[29,5],[30,5],[5,5],[31,5],[32,5],[33,5],[34,5],[6,5],[38,5],[35,5],[36,5],[37,5],[39,5],[7,5],[40,5],[45,5],[46,5],[41,5],[42,5],[43,5],[44,5],[8,5],[50,5],[47,5],[48,5],[49,5],[51,5],[9,5],[52,5],[53,5],[54,5],[57,5],[55,5],[56,5],[1,5],[58,5],[12,5],[62,5],[72,5],[228,5],[220,5],[229,5],[226,217],[232,218],[230,217],[225,219],[231,5],[105,220],[112,221],[104,220],[119,222],[96,223],[95,224],[118,225],[113,226],[116,227],[98,228],[97,229],[93,230],[92,231],[115,232],[94,233],[99,234],[100,5],[103,234],[90,5],[121,235],[120,234],[107,236],[108,237],[110,238],[106,239],[109,240],[114,225],[101,241],[102,242],[111,243],[91,244],[117,245],[247,5],[263,272],[195,273],[193,274],[196,275],[272,276],[262,276],[261,276],[265,277],[201,278],[271,279],[268,280],[269,281],[267,282],[270,283],[264,284],[266,285],[194,286],[73,287],[227,288],[289,289],[434,290]],"semanticDiagnosticsPerFile":[241,239,242,240,237,238,243,246,245,244,338,349,325,323,322,327,331,335,333,328,326,334,330,336,337,324,329,317,304,302,316,307,305,308,306,303,309,310,318,311,312,314,313,315,319,291,292,296,295,294,429,430,433,212,210,213,218,211,214,215,216,217,431,432,301,299,300,297,298,368,351,350,274,273,363,346,348,340,339,341,347,345,344,342,343,183,184,84,86,191,174,192,185,175,186,79,85,176,177,187,189,190,178,179,181,180,182,369,370,374,371,372,373,367,357,366,365,359,358,360,352,361,362,353,275,288,286,287,219,424,423,376,375,293,81,82,80,249,248,252,253,254,251,255,250,256,259,258,260,257,441,278,282,280,277,443,439,444,445,446,447,448,469,454,460,458,457,459,468,463,465,466,467,461,462,464,456,455,471,450,449,452,453,451,472,473,474,442,87,88,123,124,125,126,127,128,129,130,131,132,133,135,134,136,137,138,122,172,139,140,141,173,142,143,144,145,146,147,148,149,150,151,152,153,154,156,155,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,475,476,440,477,502,503,478,481,500,501,491,490,488,483,496,494,498,482,495,499,484,485,497,479,486,487,489,493,504,492,480,517,516,511,513,512,505,506,508,510,514,515,507,509,285,284,518,519,470,520,521,522,283,89,281,279,332,415,377,378,356,354,355,428,233,234,199,197,200,235,236,188,198,83,438,411,412,413,414,420,421,425,422,401,406,410,407,408,409,392,393,380,382,399,383,400,394,384,395,379,381,385,386,396,397,398,387,388,390,389,391,405,404,402,403,223,74,224,75,208,78,203,222,221,205,206,76,209,204,77,207,426,419,417,418,416,364,320,321,64,67,68,65,66,71,69,70,59,60,10,11,14,13,2,15,16,17,18,19,20,21,22,3,4,23,27,24,25,26,28,29,30,5,31,32,33,34,6,38,35,36,37,39,7,40,45,46,41,42,43,44,8,50,47,48,49,51,9,52,53,54,57,55,56,1,58,12,62,72,228,220,229,226,232,230,225,231,105,112,104,119,96,95,118,113,116,98,97,93,92,115,94,99,100,103,90,121,120,107,108,110,106,109,114,101,102,111,91,117,247,63,263,195,193,61,196,272,262,261,265,201,202,271,268,269,267,270,264,266,194,73,227,276,289,437,290,427,435,434,436],"latestChangedDtsFile":"./test/handshakes/xx.spec.d.ts"},"version":"5.3.2"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/package.json b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/package.json new file mode 100644 index 000000000..fe61e2967 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/package.json @@ -0,0 +1,93 @@ +{ + "name": "@chainsafe/libp2p-noise", + "version": "14.0.0", + "author": "ChainSafe ", + "license": "Apache-2.0 OR MIT", + "homepage": "https://github.com/ChainSafe/js-libp2p-noise#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/ChainSafe/js-libp2p-noise.git" + }, + "bugs": { + "url": "https://github.com/ChainSafe/js-libp2p-noise/issues" + }, + "keywords": [ + "crypto", + "libp2p", + "noise" + ], + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + }, + "type": "module", + "types": "./dist/src/index.d.ts", + "files": [ + "src", + "dist", + "!dist/test", + "!**/*.tsbuildinfo" + ], + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "import": "./dist/src/index.js" + } + }, + "eslintConfig": { + "extends": "ipfs", + "parserOptions": { + "sourceType": "module" + }, + "rules": { + "@typescript-eslint/no-unused-vars": "error", + "@typescript-eslint/explicit-function-return-type": "warn", + "@typescript-eslint/strict-boolean-expressions": "off" + }, + "ignorePatterns": [ + "src/proto/payload.js", + "src/proto/payload.d.ts", + "test/fixtures/node-globals.js" + ] + }, + "scripts": { + "bench": "node benchmarks/benchmark.js", + "clean": "aegir clean", + "dep-check": "aegir dep-check", + "build": "aegir build", + "lint": "aegir lint", + "lint:fix": "aegir lint --fix", + "test": "aegir test", + "test:node": "aegir test -t node", + "test:browser": "aegir test -t browser -t webworker", + "test:electron-main": "aegir test -t electron-main", + "test:interop": "aegir test -t node -f dist/test/interop.js", + "docs": "aegir docs", + "proto:gen": "protons ./src/proto/payload.proto", + "prepublish": "npm run build" + }, + "dependencies": { + "@chainsafe/as-chacha20poly1305": "^0.1.0", + "@chainsafe/as-sha256": "^0.4.1", + "@libp2p/crypto": "^3.0.0", + "@libp2p/interface": "^1.0.0", + "@libp2p/peer-id": "^4.0.0", + "@noble/ciphers": "^0.4.0", + "@noble/curves": "^1.1.0", + "@noble/hashes": "^1.3.1", + "it-byte-stream": "^1.0.0", + "it-length-prefixed": "^9.0.1", + "it-length-prefixed-stream": "^1.0.0", + "it-pair": "^2.0.6", + "it-pipe": "^3.0.1", + "it-stream-types": "^2.0.1", + "protons-runtime": "^5.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.4", + "wherearewe": "^2.0.1" + }, + "browser": { + "./dist/src/crypto/index.js": "./dist/src/crypto/index.browser.js", + "util": false + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/@types/basic.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/@types/basic.ts new file mode 100644 index 000000000..364d1f89e --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/@types/basic.ts @@ -0,0 +1,5 @@ +export type bytes = Uint8Array +export type bytes32 = Uint8Array +export type bytes16 = Uint8Array + +export type uint64 = number diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/@types/handshake-interface.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/@types/handshake-interface.ts new file mode 100644 index 000000000..a02af2ac2 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/@types/handshake-interface.ts @@ -0,0 +1,12 @@ +import type { NoiseSession } from './handshake.js' +import type { NoiseExtensions } from '../proto/payload.js' +import type { PeerId } from '@libp2p/interface' +import type { Uint8ArrayList } from 'uint8arraylist' + +export interface IHandshake { + session: NoiseSession + remotePeer: PeerId + remoteExtensions: NoiseExtensions + encrypt(plaintext: Uint8Array | Uint8ArrayList, session: NoiseSession): Uint8Array | Uint8ArrayList + decrypt(ciphertext: Uint8Array | Uint8ArrayList, session: NoiseSession, dst?: Uint8Array): { plaintext: Uint8Array | Uint8ArrayList, valid: boolean } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/@types/handshake.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/@types/handshake.ts new file mode 100644 index 000000000..46754ea61 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/@types/handshake.ts @@ -0,0 +1,49 @@ +import type { bytes, bytes32, uint64 } from './basic.js' +import type { KeyPair } from './libp2p.js' +import type { Nonce } from '../nonce.js' +import type { Uint8ArrayList } from 'uint8arraylist' + +export type Hkdf = [bytes, bytes, bytes] + +export interface MessageBuffer { + ne: bytes32 + ns: Uint8Array | Uint8ArrayList + ciphertext: Uint8Array | Uint8ArrayList +} + +export interface CipherState { + k: bytes32 + // For performance reasons, the nonce is represented as a Nonce object + // The nonce is treated as a uint64, even though the underlying `number` only has 52 safely-available bits. + n: Nonce +} + +export interface SymmetricState { + cs: CipherState + ck: bytes32 // chaining key + h: bytes32 // handshake hash +} + +export interface HandshakeState { + ss: SymmetricState + s: KeyPair + e?: KeyPair + rs: Uint8Array | Uint8ArrayList + re: bytes32 + psk: bytes32 +} + +export interface NoiseSession { + hs: HandshakeState + h?: bytes32 + cs1?: CipherState + cs2?: CipherState + mc: uint64 + i: boolean +} + +export interface INoisePayload { + identityKey: bytes + identitySig: bytes + data: bytes +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/@types/libp2p.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/@types/libp2p.ts new file mode 100644 index 000000000..055b753ad --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/@types/libp2p.ts @@ -0,0 +1,10 @@ +import type { bytes32 } from './basic.js' +import type { NoiseExtensions } from '../proto/payload.js' +import type { ConnectionEncrypter } from '@libp2p/interface' + +export interface KeyPair { + publicKey: bytes32 + privateKey: bytes32 +} + +export interface INoiseConnection extends ConnectionEncrypter {} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/constants.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/constants.ts new file mode 100644 index 000000000..7e8105c47 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/constants.ts @@ -0,0 +1,4 @@ +export const NOISE_MSG_MAX_LENGTH_BYTES = 65535 +export const NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG = NOISE_MSG_MAX_LENGTH_BYTES - 16 + +export const DUMP_SESSION_KEYS = Boolean(globalThis.process?.env?.DUMP_SESSION_KEYS) diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/crypto.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/crypto.ts new file mode 100644 index 000000000..cfb048cd1 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/crypto.ts @@ -0,0 +1,17 @@ +import { type Uint8ArrayList } from 'uint8arraylist' +import type { bytes32 } from './@types/basic.js' +import type { Hkdf } from './@types/handshake.js' +import type { KeyPair } from './@types/libp2p.js' + +export interface ICryptoInterface { + hashSHA256(data: Uint8Array | Uint8ArrayList): Uint8Array + + getHKDF(ck: bytes32, ikm: Uint8Array): Hkdf + + generateX25519KeyPair(): KeyPair + generateX25519KeyPairFromSeed(seed: Uint8Array): KeyPair + generateX25519SharedKey(privateKey: Uint8Array | Uint8ArrayList, publicKey: Uint8Array | Uint8ArrayList): Uint8Array + + chaCha20Poly1305Encrypt(plaintext: Uint8Array | Uint8ArrayList, nonce: Uint8Array, ad: Uint8Array, k: bytes32): Uint8ArrayList | Uint8Array + chaCha20Poly1305Decrypt(ciphertext: Uint8Array | Uint8ArrayList, nonce: Uint8Array, ad: Uint8Array, k: bytes32, dst?: Uint8Array): Uint8ArrayList | Uint8Array | null +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/crypto/index.browser.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/crypto/index.browser.ts new file mode 100644 index 000000000..39c9ea7d0 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/crypto/index.browser.ts @@ -0,0 +1,3 @@ +import { pureJsCrypto } from './js.js' + +export const defaultCrypto = pureJsCrypto diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/crypto/index.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/crypto/index.ts new file mode 100644 index 000000000..3b57d9830 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/crypto/index.ts @@ -0,0 +1,217 @@ +import crypto from 'node:crypto' +import { newInstance, ChaCha20Poly1305 } from '@chainsafe/as-chacha20poly1305' +import { digest } from '@chainsafe/as-sha256' +import { Uint8ArrayList } from 'uint8arraylist' +import { isElectronMain } from 'wherearewe' +import { pureJsCrypto } from './js.js' +import type { KeyPair } from '../@types/libp2p.js' +import type { ICryptoInterface } from '../crypto.js' + +const ctx = newInstance() +const asImpl = new ChaCha20Poly1305(ctx) +const CHACHA_POLY1305 = 'chacha20-poly1305' +const PKCS8_PREFIX = Buffer.from([0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x6e, 0x04, 0x22, 0x04, 0x20]) +const X25519_PREFIX = Buffer.from([0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x6e, 0x03, 0x21, 0x00]) +const nodeCrypto: Pick = { + hashSHA256 (data) { + const hash = crypto.createHash('sha256') + + if (data instanceof Uint8Array) { + return hash.update(data).digest() + } + + for (const buf of data) { + hash.update(buf) + } + + return hash.digest() + }, + + chaCha20Poly1305Encrypt (plaintext, nonce, ad, k) { + const cipher = crypto.createCipheriv(CHACHA_POLY1305, k, nonce, { + authTagLength: 16 + }) + cipher.setAAD(ad, { plaintextLength: plaintext.byteLength }) + + if (plaintext instanceof Uint8Array) { + const updated = cipher.update(plaintext) + const final = cipher.final() + const tag = cipher.getAuthTag() + + return Buffer.concat([updated, tag, final], updated.byteLength + tag.byteLength + final.byteLength) + } + + const output = new Uint8ArrayList() + + for (const buf of plaintext) { + output.append(cipher.update(buf)) + } + + const final = cipher.final() + + if (final.byteLength > 0) { + output.append(final) + } + + output.append(cipher.getAuthTag()) + + return output + }, + + chaCha20Poly1305Decrypt (ciphertext, nonce, ad, k, _dst) { + const authTag = ciphertext.subarray(ciphertext.length - 16) + const decipher = crypto.createDecipheriv(CHACHA_POLY1305, k, nonce, { + authTagLength: 16 + }) + + let text: Uint8Array | Uint8ArrayList + + if (ciphertext instanceof Uint8Array) { + text = ciphertext.subarray(0, ciphertext.length - 16) + } else { + text = ciphertext.sublist(0, ciphertext.length - 16) + } + + decipher.setAAD(ad, { + plaintextLength: text.byteLength + }) + decipher.setAuthTag(authTag) + + if (text instanceof Uint8Array) { + const output = decipher.update(text) + const final = decipher.final() + + if (final.byteLength > 0) { + return Buffer.concat([output, final], output.byteLength + final.byteLength) + } + + return output + } + + const output = new Uint8ArrayList() + + for (const buf of text) { + output.append(decipher.update(buf)) + } + + const final = decipher.final() + + if (final.byteLength > 0) { + output.append(final) + } + + return output + } +} + +const asCrypto: Pick = { + hashSHA256 (data) { + return digest(data.subarray()) + }, + chaCha20Poly1305Encrypt (plaintext, nonce, ad, k) { + return asImpl.seal(k, nonce, plaintext.subarray(), ad) + }, + chaCha20Poly1305Decrypt (ciphertext, nonce, ad, k, dst) { + return asImpl.open(k, nonce, ciphertext.subarray(), ad, dst) + } +} + +// benchmarks show that for chacha20poly1305 +// the as implementation is faster for smaller payloads(<1200) +// and the node implementation is faster for larger payloads +export const defaultCrypto: ICryptoInterface = { + ...pureJsCrypto, + hashSHA256 (data) { + return nodeCrypto.hashSHA256(data) + }, + chaCha20Poly1305Encrypt (plaintext, nonce, ad, k) { + if (plaintext.byteLength < 1200) { + return asCrypto.chaCha20Poly1305Encrypt(plaintext, nonce, ad, k) + } + return nodeCrypto.chaCha20Poly1305Encrypt(plaintext, nonce, ad, k) + }, + chaCha20Poly1305Decrypt (ciphertext, nonce, ad, k, dst) { + if (ciphertext.byteLength < 1200) { + return asCrypto.chaCha20Poly1305Decrypt(ciphertext, nonce, ad, k, dst) + } + return nodeCrypto.chaCha20Poly1305Decrypt(ciphertext, nonce, ad, k, dst) + }, + generateX25519KeyPair (): KeyPair { + const { publicKey, privateKey } = crypto.generateKeyPairSync('x25519', { + publicKeyEncoding: { + type: 'spki', + format: 'der' + }, + privateKeyEncoding: { + type: 'pkcs8', + format: 'der' + } + }) + + return { + publicKey: publicKey.subarray(X25519_PREFIX.length), + privateKey: privateKey.subarray(PKCS8_PREFIX.length) + } + }, + generateX25519KeyPairFromSeed (seed: Uint8Array): KeyPair { + const privateKey = crypto.createPrivateKey({ + key: Buffer.concat([ + PKCS8_PREFIX, + seed + ], PKCS8_PREFIX.byteLength + seed.byteLength), + type: 'pkcs8', + format: 'der' + }) + + const publicKey = crypto.createPublicKey(privateKey) + .export({ + type: 'spki', + format: 'der' + }).subarray(X25519_PREFIX.length) + + return { + publicKey, + privateKey: seed + } + }, + generateX25519SharedKey (privateKey: Uint8Array | Uint8ArrayList, publicKey: Uint8Array | Uint8ArrayList): Uint8Array { + if (publicKey instanceof Uint8Array) { + publicKey = Buffer.concat([ + X25519_PREFIX, + publicKey + ], X25519_PREFIX.byteLength + publicKey.byteLength) + } else { + publicKey.prepend(X25519_PREFIX) + publicKey = publicKey.subarray() + } + + if (privateKey instanceof Uint8Array) { + privateKey = Buffer.concat([ + PKCS8_PREFIX, + privateKey + ], PKCS8_PREFIX.byteLength + privateKey.byteLength) + } else { + privateKey.prepend(PKCS8_PREFIX) + privateKey = privateKey.subarray() + } + + return crypto.diffieHellman({ + publicKey: crypto.createPublicKey({ + key: Buffer.from(publicKey, publicKey.byteOffset, publicKey.byteLength), + type: 'spki', + format: 'der' + }), + privateKey: crypto.createPrivateKey({ + key: Buffer.from(privateKey, privateKey.byteOffset, privateKey.byteLength), + type: 'pkcs8', + format: 'der' + }) + }) + } +} + +// no chacha20-poly1305 in electron https://github.com/electron/electron/issues/24024 +if (isElectronMain) { + defaultCrypto.chaCha20Poly1305Encrypt = asCrypto.chaCha20Poly1305Encrypt + defaultCrypto.chaCha20Poly1305Decrypt = asCrypto.chaCha20Poly1305Decrypt +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/crypto/js.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/crypto/js.ts new file mode 100644 index 000000000..034a0a3dd --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/crypto/js.ts @@ -0,0 +1,58 @@ +import { chacha20poly1305 } from '@noble/ciphers/chacha' +import { x25519 } from '@noble/curves/ed25519' +import { extract, expand } from '@noble/hashes/hkdf' +import { sha256 } from '@noble/hashes/sha256' +import type { bytes32 } from '../@types/basic.js' +import type { Hkdf } from '../@types/handshake.js' +import type { KeyPair } from '../@types/libp2p.js' +import type { ICryptoInterface } from '../crypto.js' +import type { Uint8ArrayList } from 'uint8arraylist' + +export const pureJsCrypto: ICryptoInterface = { + hashSHA256 (data: Uint8Array | Uint8ArrayList): Uint8Array { + return sha256(data.subarray()) + }, + + getHKDF (ck: bytes32, ikm: Uint8Array): Hkdf { + const prk = extract(sha256, ikm, ck) + const okmU8Array = expand(sha256, prk, undefined, 96) + const okm = okmU8Array + + const k1 = okm.subarray(0, 32) + const k2 = okm.subarray(32, 64) + const k3 = okm.subarray(64, 96) + + return [k1, k2, k3] + }, + + generateX25519KeyPair (): KeyPair { + const secretKey = x25519.utils.randomPrivateKey() + const publicKey = x25519.getPublicKey(secretKey) + + return { + publicKey, + privateKey: secretKey + } + }, + + generateX25519KeyPairFromSeed (seed: Uint8Array): KeyPair { + const publicKey = x25519.getPublicKey(seed) + + return { + publicKey, + privateKey: seed + } + }, + + generateX25519SharedKey (privateKey: Uint8Array | Uint8ArrayList, publicKey: Uint8Array | Uint8ArrayList): Uint8Array { + return x25519.getSharedSecret(privateKey.subarray(), publicKey.subarray()) + }, + + chaCha20Poly1305Encrypt (plaintext: Uint8Array | Uint8ArrayList, nonce: Uint8Array, ad: Uint8Array, k: bytes32): Uint8Array { + return chacha20poly1305(k, nonce, ad).encrypt(plaintext.subarray()) + }, + + chaCha20Poly1305Decrypt (ciphertext: Uint8Array | Uint8ArrayList, nonce: Uint8Array, ad: Uint8Array, k: bytes32, dst?: Uint8Array): Uint8Array | null { + return chacha20poly1305(k, nonce, ad).decrypt(ciphertext.subarray(), dst) + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/crypto/streaming.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/crypto/streaming.ts new file mode 100644 index 000000000..82e7936d8 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/crypto/streaming.ts @@ -0,0 +1,72 @@ +import { Uint8ArrayList } from 'uint8arraylist' +import { allocUnsafe as uint8ArrayAllocUnsafe } from 'uint8arrays/alloc' +import { NOISE_MSG_MAX_LENGTH_BYTES, NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG } from '../constants.js' +import { uint16BEEncode } from '../encoder.js' +import type { IHandshake } from '../@types/handshake-interface.js' +import type { MetricsRegistry } from '../metrics.js' +import type { Transform } from 'it-stream-types' + +const CHACHA_TAG_LENGTH = 16 + +// Returns generator that encrypts payload from the user +export function encryptStream (handshake: IHandshake, metrics?: MetricsRegistry): Transform> { + return async function * (source) { + for await (const chunk of source) { + for (let i = 0; i < chunk.length; i += NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG) { + let end = i + NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG + if (end > chunk.length) { + end = chunk.length + } + + let data: Uint8Array | Uint8ArrayList + + if (chunk instanceof Uint8Array) { + data = handshake.encrypt(chunk.subarray(i, end), handshake.session) + } else { + data = handshake.encrypt(chunk.sublist(i, end), handshake.session) + } + + metrics?.encryptedPackets.increment() + + yield new Uint8ArrayList(uint16BEEncode(data.byteLength), data) + } + } + } +} + +// Decrypt received payload to the user +export function decryptStream (handshake: IHandshake, metrics?: MetricsRegistry): Transform, AsyncGenerator> { + return async function * (source) { + for await (const chunk of source) { + for (let i = 0; i < chunk.length; i += NOISE_MSG_MAX_LENGTH_BYTES) { + let end = i + NOISE_MSG_MAX_LENGTH_BYTES + if (end > chunk.length) { + end = chunk.length + } + + if (end - CHACHA_TAG_LENGTH < i) { + throw new Error('Invalid chunk') + } + + const encrypted = chunk.sublist(i, end) + + let dst: Uint8Array + + // @ts-expect-error .bufs is private + if (encrypted.bufs.length === 1) { + dst = chunk.subarray(i, end - CHACHA_TAG_LENGTH) + } else { + dst = uint8ArrayAllocUnsafe(end - CHACHA_TAG_LENGTH - i) + } + + const { plaintext: decrypted, valid } = handshake.decrypt(encrypted, handshake.session, dst) + if (!valid) { + metrics?.decryptErrors.increment() + throw new Error('Failed to validate decrypted chunk') + } + metrics?.decryptedPackets.increment() + yield decrypted + } + } + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/encoder.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/encoder.ts new file mode 100644 index 000000000..8c4d203d4 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/encoder.ts @@ -0,0 +1,73 @@ +import { Uint8ArrayList } from 'uint8arraylist' +import { alloc as uint8ArrayAlloc, allocUnsafe as uint8ArrayAllocUnsafe } from 'uint8arrays/alloc' +import type { bytes } from './@types/basic.js' +import type { MessageBuffer } from './@types/handshake.js' +import type { LengthDecoderFunction } from 'it-length-prefixed' + +export const uint16BEEncode = (value: number): Uint8Array => { + const target = uint8ArrayAllocUnsafe(2) + new DataView(target.buffer, target.byteOffset, target.byteLength).setUint16(0, value, false) + return target +} +uint16BEEncode.bytes = 2 + +export const uint16BEDecode: LengthDecoderFunction = (data: Uint8Array | Uint8ArrayList): number => { + if (data.length < 2) throw RangeError('Could not decode int16BE') + + if (data instanceof Uint8Array) { + return new DataView(data.buffer, data.byteOffset, data.byteLength).getUint16(0, false) + } + + return data.getUint16(0) +} +uint16BEDecode.bytes = 2 + +// Note: IK and XX encoder usage is opposite (XX uses in stages encode0 where IK uses encode1) + +export function encode0 (message: MessageBuffer): Uint8ArrayList { + return new Uint8ArrayList(message.ne, message.ciphertext) +} + +export function encode1 (message: MessageBuffer): Uint8ArrayList { + return new Uint8ArrayList(message.ne, message.ns, message.ciphertext) +} + +export function encode2 (message: MessageBuffer): Uint8ArrayList { + return new Uint8ArrayList(message.ns, message.ciphertext) +} + +export function decode0 (input: bytes): MessageBuffer { + if (input.length < 32) { + throw new Error('Cannot decode stage 0 MessageBuffer: length less than 32 bytes.') + } + + return { + ne: input.subarray(0, 32), + ciphertext: input.subarray(32, input.length), + ns: uint8ArrayAlloc(0) + } +} + +export function decode1 (input: bytes): MessageBuffer { + if (input.length < 80) { + throw new Error('Cannot decode stage 1 MessageBuffer: length less than 80 bytes.') + } + + return { + ne: input.subarray(0, 32), + ns: input.subarray(32, 80), + ciphertext: input.subarray(80, input.length) + } +} + +export function decode2 (input: bytes): MessageBuffer { + if (input.length < 48) { + throw new Error('Cannot decode stage 2 MessageBuffer: length less than 48 bytes.') + } + + return { + ne: uint8ArrayAlloc(0), + ns: input.subarray(0, 48), + ciphertext: input.subarray(48, input.length) + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/errors.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/errors.ts new file mode 100644 index 000000000..2e1aa43d8 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/errors.ts @@ -0,0 +1,21 @@ +export class UnexpectedPeerError extends Error { + public code: string + + constructor (message = 'Unexpected Peer') { + super(message) + this.code = UnexpectedPeerError.code + } + + static readonly code = 'ERR_UNEXPECTED_PEER' +} + +export class InvalidCryptoExchangeError extends Error { + public code: string + + constructor (message = 'Invalid crypto exchange') { + super(message) + this.code = InvalidCryptoExchangeError.code + } + + static readonly code = 'ERR_INVALID_CRYPTO_EXCHANGE' +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/handshake-xx.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/handshake-xx.ts new file mode 100644 index 000000000..a64c518f3 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/handshake-xx.ts @@ -0,0 +1,182 @@ +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc' +import { decode0, decode1, decode2, encode0, encode1, encode2 } from './encoder.js' +import { InvalidCryptoExchangeError, UnexpectedPeerError } from './errors.js' +import { XX } from './handshakes/xx.js' +import { + logLocalStaticKeys, + logLocalEphemeralKeys, + logRemoteEphemeralKey, + logRemoteStaticKey, + logCipherState +} from './logger.js' +import { + decodePayload, + getPeerIdFromPayload, + verifySignedPayload +} from './utils.js' +import type { bytes, bytes32 } from './@types/basic.js' +import type { IHandshake } from './@types/handshake-interface.js' +import type { CipherState, NoiseSession } from './@types/handshake.js' +import type { KeyPair } from './@types/libp2p.js' +import type { ICryptoInterface } from './crypto.js' +import type { NoiseComponents } from './index.js' +import type { NoiseExtensions } from './proto/payload.js' +import type { Logger, PeerId } from '@libp2p/interface' +import type { LengthPrefixedStream } from 'it-length-prefixed-stream' +import type { Uint8ArrayList } from 'uint8arraylist' + +export class XXHandshake implements IHandshake { + public isInitiator: boolean + public session: NoiseSession + public remotePeer!: PeerId + public remoteExtensions: NoiseExtensions = { webtransportCerthashes: [] } + + protected payload: bytes + protected connection: LengthPrefixedStream + protected xx: XX + protected staticKeypair: KeyPair + + private readonly prologue: bytes32 + private readonly log: Logger + + constructor ( + components: NoiseComponents, + isInitiator: boolean, + payload: bytes, + prologue: bytes32, + crypto: ICryptoInterface, + staticKeypair: KeyPair, + connection: LengthPrefixedStream, + remotePeer?: PeerId, + handshake?: XX + ) { + this.log = components.logger.forComponent('libp2p:noise:xxhandshake') + this.isInitiator = isInitiator + this.payload = payload + this.prologue = prologue + this.staticKeypair = staticKeypair + this.connection = connection + if (remotePeer) { + this.remotePeer = remotePeer + } + this.xx = handshake ?? new XX(components, crypto) + this.session = this.xx.initSession(this.isInitiator, this.prologue, this.staticKeypair) + } + + // stage 0 + public async propose (): Promise { + logLocalStaticKeys(this.session.hs.s, this.log) + if (this.isInitiator) { + this.log.trace('Stage 0 - Initiator starting to send first message.') + const messageBuffer = this.xx.sendMessage(this.session, uint8ArrayAlloc(0)) + await this.connection.write(encode0(messageBuffer)) + this.log.trace('Stage 0 - Initiator finished sending first message.') + logLocalEphemeralKeys(this.session.hs.e, this.log) + } else { + this.log.trace('Stage 0 - Responder waiting to receive first message...') + const receivedMessageBuffer = decode0((await this.connection.read()).subarray()) + const { valid } = this.xx.recvMessage(this.session, receivedMessageBuffer) + if (!valid) { + throw new InvalidCryptoExchangeError('xx handshake stage 0 validation fail') + } + this.log.trace('Stage 0 - Responder received first message.') + logRemoteEphemeralKey(this.session.hs.re, this.log) + } + } + + // stage 1 + public async exchange (): Promise { + if (this.isInitiator) { + this.log.trace('Stage 1 - Initiator waiting to receive first message from responder...') + const receivedMessageBuffer = decode1((await this.connection.read()).subarray()) + const { plaintext, valid } = this.xx.recvMessage(this.session, receivedMessageBuffer) + if (!valid) { + throw new InvalidCryptoExchangeError('xx handshake stage 1 validation fail') + } + this.log.trace('Stage 1 - Initiator received the message.') + logRemoteEphemeralKey(this.session.hs.re, this.log) + logRemoteStaticKey(this.session.hs.rs, this.log) + + this.log.trace("Initiator going to check remote's signature...") + try { + const decodedPayload = decodePayload(plaintext) + this.remotePeer = this.remotePeer || await getPeerIdFromPayload(decodedPayload) + await verifySignedPayload(this.session.hs.rs, decodedPayload, this.remotePeer) + this.setRemoteNoiseExtension(decodedPayload.extensions) + } catch (e) { + const err = e as Error + throw new UnexpectedPeerError(`Error occurred while verifying signed payload: ${err.message}`) + } + this.log.trace('All good with the signature!') + } else { + this.log.trace('Stage 1 - Responder sending out first message with signed payload and static key.') + const messageBuffer = this.xx.sendMessage(this.session, this.payload) + await this.connection.write(encode1(messageBuffer)) + this.log.trace('Stage 1 - Responder sent the second handshake message with signed payload.') + logLocalEphemeralKeys(this.session.hs.e, this.log) + } + } + + // stage 2 + public async finish (): Promise { + if (this.isInitiator) { + this.log.trace('Stage 2 - Initiator sending third handshake message.') + const messageBuffer = this.xx.sendMessage(this.session, this.payload) + await this.connection.write(encode2(messageBuffer)) + this.log.trace('Stage 2 - Initiator sent message with signed payload.') + } else { + this.log.trace('Stage 2 - Responder waiting for third handshake message...') + const receivedMessageBuffer = decode2((await this.connection.read()).subarray()) + const { plaintext, valid } = this.xx.recvMessage(this.session, receivedMessageBuffer) + if (!valid) { + throw new InvalidCryptoExchangeError('xx handshake stage 2 validation fail') + } + this.log.trace('Stage 2 - Responder received the message, finished handshake.') + + try { + const decodedPayload = decodePayload(plaintext) + this.remotePeer = this.remotePeer || await getPeerIdFromPayload(decodedPayload) + await verifySignedPayload(this.session.hs.rs, decodedPayload, this.remotePeer) + this.setRemoteNoiseExtension(decodedPayload.extensions) + } catch (e) { + const err = e as Error + throw new UnexpectedPeerError(`Error occurred while verifying signed payload: ${err.message}`) + } + } + logCipherState(this.session, this.log) + } + + public encrypt (plaintext: Uint8Array | Uint8ArrayList, session: NoiseSession): Uint8Array | Uint8ArrayList { + const cs = this.getCS(session) + + return this.xx.encryptWithAd(cs, uint8ArrayAlloc(0), plaintext) + } + + public decrypt (ciphertext: Uint8Array | Uint8ArrayList, session: NoiseSession, dst?: Uint8Array): { plaintext: Uint8Array | Uint8ArrayList, valid: boolean } { + const cs = this.getCS(session, false) + + return this.xx.decryptWithAd(cs, uint8ArrayAlloc(0), ciphertext, dst) + } + + public getRemoteStaticKey (): Uint8Array | Uint8ArrayList { + return this.session.hs.rs + } + + private getCS (session: NoiseSession, encryption = true): CipherState { + if (!session.cs1 || !session.cs2) { + throw new InvalidCryptoExchangeError('Handshake not completed properly, cipher state does not exist.') + } + + if (this.isInitiator) { + return encryption ? session.cs1 : session.cs2 + } else { + return encryption ? session.cs2 : session.cs1 + } + } + + protected setRemoteNoiseExtension (e: NoiseExtensions | null | undefined): void { + if (e) { + this.remoteExtensions = e + } + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/handshakes/abstract-handshake.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/handshakes/abstract-handshake.ts new file mode 100644 index 000000000..9e34a61c4 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/handshakes/abstract-handshake.ts @@ -0,0 +1,185 @@ +import { Uint8ArrayList } from 'uint8arraylist' +import { fromString as uint8ArrayFromString } from 'uint8arrays' +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc' +import { equals as uint8ArrayEquals } from 'uint8arrays/equals' +import { Nonce } from '../nonce.js' +import type { bytes, bytes32 } from '../@types/basic.js' +import type { CipherState, MessageBuffer, SymmetricState } from '../@types/handshake.js' +import type { ICryptoInterface } from '../crypto.js' +import type { NoiseComponents } from '../index.js' +import type { Logger } from '@libp2p/interface' + +export interface DecryptedResult { + plaintext: Uint8ArrayList | Uint8Array + valid: boolean +} + +export interface SplitState { + cs1: CipherState + cs2: CipherState +} + +export abstract class AbstractHandshake { + public crypto: ICryptoInterface + private readonly log: Logger + + constructor (components: NoiseComponents, crypto: ICryptoInterface) { + this.log = components.logger.forComponent('libp2p:noise:abstract-handshake') + this.crypto = crypto + } + + public encryptWithAd (cs: CipherState, ad: Uint8Array, plaintext: Uint8Array | Uint8ArrayList): Uint8Array | Uint8ArrayList { + const e = this.encrypt(cs.k, cs.n, ad, plaintext) + cs.n.increment() + + return e + } + + public decryptWithAd (cs: CipherState, ad: Uint8Array, ciphertext: Uint8Array | Uint8ArrayList, dst?: Uint8Array): DecryptedResult { + const { plaintext, valid } = this.decrypt(cs.k, cs.n, ad, ciphertext, dst) + if (valid) cs.n.increment() + + return { plaintext, valid } + } + + // Cipher state related + protected hasKey (cs: CipherState): boolean { + return !this.isEmptyKey(cs.k) + } + + protected createEmptyKey (): bytes32 { + return uint8ArrayAlloc(32) + } + + protected isEmptyKey (k: bytes32): boolean { + const emptyKey = this.createEmptyKey() + return uint8ArrayEquals(emptyKey, k) + } + + protected encrypt (k: bytes32, n: Nonce, ad: Uint8Array, plaintext: Uint8Array | Uint8ArrayList): Uint8Array | Uint8ArrayList { + n.assertValue() + + return this.crypto.chaCha20Poly1305Encrypt(plaintext, n.getBytes(), ad, k) + } + + protected encryptAndHash (ss: SymmetricState, plaintext: bytes): Uint8Array | Uint8ArrayList { + let ciphertext + if (this.hasKey(ss.cs)) { + ciphertext = this.encryptWithAd(ss.cs, ss.h, plaintext) + } else { + ciphertext = plaintext + } + + this.mixHash(ss, ciphertext) + return ciphertext + } + + protected decrypt (k: bytes32, n: Nonce, ad: bytes, ciphertext: Uint8Array | Uint8ArrayList, dst?: Uint8Array): DecryptedResult { + n.assertValue() + + const encryptedMessage = this.crypto.chaCha20Poly1305Decrypt(ciphertext, n.getBytes(), ad, k, dst) + + if (encryptedMessage) { + return { + plaintext: encryptedMessage, + valid: true + } + } else { + return { + plaintext: uint8ArrayAlloc(0), + valid: false + } + } + } + + protected decryptAndHash (ss: SymmetricState, ciphertext: Uint8Array | Uint8ArrayList): DecryptedResult { + let plaintext: Uint8Array | Uint8ArrayList + let valid = true + if (this.hasKey(ss.cs)) { + ({ plaintext, valid } = this.decryptWithAd(ss.cs, ss.h, ciphertext)) + } else { + plaintext = ciphertext + } + + this.mixHash(ss, ciphertext) + return { plaintext, valid } + } + + protected dh (privateKey: bytes32, publicKey: Uint8Array | Uint8ArrayList): bytes32 { + try { + const derivedU8 = this.crypto.generateX25519SharedKey(privateKey, publicKey) + + if (derivedU8.length === 32) { + return derivedU8 + } + + return derivedU8.subarray(0, 32) + } catch (e) { + const err = e as Error + this.log.error('error deriving shared key', err) + return uint8ArrayAlloc(32) + } + } + + protected mixHash (ss: SymmetricState, data: Uint8Array | Uint8ArrayList): void { + ss.h = this.getHash(ss.h, data) + } + + protected getHash (a: Uint8Array, b: Uint8Array | Uint8ArrayList): Uint8Array { + const u = this.crypto.hashSHA256(new Uint8ArrayList(a, b)) + return u + } + + protected mixKey (ss: SymmetricState, ikm: bytes32): void { + const [ck, tempK] = this.crypto.getHKDF(ss.ck, ikm) + ss.cs = this.initializeKey(tempK) + ss.ck = ck + } + + protected initializeKey (k: bytes32): CipherState { + return { k, n: new Nonce() } + } + + // Symmetric state related + + protected initializeSymmetric (protocolName: string): SymmetricState { + const protocolNameBytes = uint8ArrayFromString(protocolName, 'utf-8') + const h = this.hashProtocolName(protocolNameBytes) + + const ck = h + const key = this.createEmptyKey() + const cs: CipherState = this.initializeKey(key) + + return { cs, ck, h } + } + + protected hashProtocolName (protocolName: Uint8Array): bytes32 { + if (protocolName.length <= 32) { + const h = uint8ArrayAlloc(32) + h.set(protocolName) + return h + } else { + return this.getHash(protocolName, uint8ArrayAlloc(0)) + } + } + + protected split (ss: SymmetricState): SplitState { + const [tempk1, tempk2] = this.crypto.getHKDF(ss.ck, uint8ArrayAlloc(0)) + const cs1 = this.initializeKey(tempk1) + const cs2 = this.initializeKey(tempk2) + + return { cs1, cs2 } + } + + protected writeMessageRegular (cs: CipherState, payload: bytes): MessageBuffer { + const ciphertext = this.encryptWithAd(cs, uint8ArrayAlloc(0), payload) + const ne = this.createEmptyKey() + const ns = uint8ArrayAlloc(0) + + return { ne, ns, ciphertext } + } + + protected readMessageRegular (cs: CipherState, message: MessageBuffer): DecryptedResult { + return this.decryptWithAd(cs, uint8ArrayAlloc(0), message.ciphertext) + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/handshakes/xx.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/handshakes/xx.ts new file mode 100644 index 000000000..5a41e3bb5 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/handshakes/xx.ts @@ -0,0 +1,186 @@ +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc' +import { isValidPublicKey } from '../utils.js' +import { AbstractHandshake, type DecryptedResult } from './abstract-handshake.js' +import type { bytes32, bytes } from '../@types/basic.js' +import type { CipherState, HandshakeState, MessageBuffer, NoiseSession } from '../@types/handshake.js' +import type { KeyPair } from '../@types/libp2p.js' +import type { Uint8ArrayList } from 'uint8arraylist' + +export class XX extends AbstractHandshake { + private initializeInitiator (prologue: bytes32, s: KeyPair, rs: bytes32, psk: bytes32): HandshakeState { + const name = 'Noise_XX_25519_ChaChaPoly_SHA256' + const ss = this.initializeSymmetric(name) + this.mixHash(ss, prologue) + const re = uint8ArrayAlloc(32) + + return { ss, s, rs, psk, re } + } + + private initializeResponder (prologue: bytes32, s: KeyPair, rs: bytes32, psk: bytes32): HandshakeState { + const name = 'Noise_XX_25519_ChaChaPoly_SHA256' + const ss = this.initializeSymmetric(name) + this.mixHash(ss, prologue) + const re = uint8ArrayAlloc(32) + + return { ss, s, rs, psk, re } + } + + private writeMessageA (hs: HandshakeState, payload: bytes, e?: KeyPair): MessageBuffer { + const ns = uint8ArrayAlloc(0) + + if (e !== undefined) { + hs.e = e + } else { + hs.e = this.crypto.generateX25519KeyPair() + } + + const ne = hs.e.publicKey + + this.mixHash(hs.ss, ne) + const ciphertext = this.encryptAndHash(hs.ss, payload) + + return { ne, ns, ciphertext } + } + + private writeMessageB (hs: HandshakeState, payload: bytes): MessageBuffer { + hs.e = this.crypto.generateX25519KeyPair() + const ne = hs.e.publicKey + this.mixHash(hs.ss, ne) + + this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.re)) + const spk = hs.s.publicKey + const ns = this.encryptAndHash(hs.ss, spk) + + this.mixKey(hs.ss, this.dh(hs.s.privateKey, hs.re)) + const ciphertext = this.encryptAndHash(hs.ss, payload) + + return { ne, ns, ciphertext } + } + + private writeMessageC (hs: HandshakeState, payload: bytes): { messageBuffer: MessageBuffer, cs1: CipherState, cs2: CipherState, h: bytes } { + const spk = hs.s.publicKey + const ns = this.encryptAndHash(hs.ss, spk) + this.mixKey(hs.ss, this.dh(hs.s.privateKey, hs.re)) + const ciphertext = this.encryptAndHash(hs.ss, payload) + const ne = this.createEmptyKey() + const messageBuffer: MessageBuffer = { ne, ns, ciphertext } + const { cs1, cs2 } = this.split(hs.ss) + + return { h: hs.ss.h, messageBuffer, cs1, cs2 } + } + + private readMessageA (hs: HandshakeState, message: MessageBuffer): DecryptedResult { + if (isValidPublicKey(message.ne)) { + hs.re = message.ne + } + + this.mixHash(hs.ss, hs.re) + return this.decryptAndHash(hs.ss, message.ciphertext) + } + + private readMessageB (hs: HandshakeState, message: MessageBuffer): DecryptedResult { + if (isValidPublicKey(message.ne)) { + hs.re = message.ne + } + + this.mixHash(hs.ss, hs.re) + if (!hs.e) { + throw new Error('Handshake state `e` param is missing.') + } + this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.re)) + const { plaintext: ns, valid: valid1 } = this.decryptAndHash(hs.ss, message.ns) + if (valid1 && isValidPublicKey(ns)) { + hs.rs = ns + } + this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.rs)) + const { plaintext, valid: valid2 } = this.decryptAndHash(hs.ss, message.ciphertext) + return { plaintext, valid: (valid1 && valid2) } + } + + private readMessageC (hs: HandshakeState, message: MessageBuffer): { h: bytes, plaintext: Uint8Array | Uint8ArrayList, valid: boolean, cs1: CipherState, cs2: CipherState } { + const { plaintext: ns, valid: valid1 } = this.decryptAndHash(hs.ss, message.ns) + if (valid1 && isValidPublicKey(ns)) { + hs.rs = ns + } + if (!hs.e) { + throw new Error('Handshake state `e` param is missing.') + } + this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.rs)) + + const { plaintext, valid: valid2 } = this.decryptAndHash(hs.ss, message.ciphertext) + const { cs1, cs2 } = this.split(hs.ss) + + return { h: hs.ss.h, plaintext, valid: (valid1 && valid2), cs1, cs2 } + } + + public initSession (initiator: boolean, prologue: bytes32, s: KeyPair): NoiseSession { + const psk = this.createEmptyKey() + const rs = uint8ArrayAlloc(32) // no static key yet + let hs + + if (initiator) { + hs = this.initializeInitiator(prologue, s, rs, psk) + } else { + hs = this.initializeResponder(prologue, s, rs, psk) + } + + return { + hs, + i: initiator, + mc: 0 + } + } + + public sendMessage (session: NoiseSession, message: bytes, ephemeral?: KeyPair): MessageBuffer { + let messageBuffer: MessageBuffer + if (session.mc === 0) { + messageBuffer = this.writeMessageA(session.hs, message, ephemeral) + } else if (session.mc === 1) { + messageBuffer = this.writeMessageB(session.hs, message) + } else if (session.mc === 2) { + const { h, messageBuffer: resultingBuffer, cs1, cs2 } = this.writeMessageC(session.hs, message) + messageBuffer = resultingBuffer + session.h = h + session.cs1 = cs1 + session.cs2 = cs2 + } else if (session.mc > 2) { + if (session.i) { + if (!session.cs1) { + throw new Error('CS1 (cipher state) is not defined') + } + + messageBuffer = this.writeMessageRegular(session.cs1, message) + } else { + if (!session.cs2) { + throw new Error('CS2 (cipher state) is not defined') + } + + messageBuffer = this.writeMessageRegular(session.cs2, message) + } + } else { + throw new Error('Session invalid.') + } + + session.mc++ + return messageBuffer + } + + public recvMessage (session: NoiseSession, message: MessageBuffer): DecryptedResult { + let plaintext: Uint8Array | Uint8ArrayList = uint8ArrayAlloc(0) + let valid = false + if (session.mc === 0) { + ({ plaintext, valid } = this.readMessageA(session.hs, message)) + } else if (session.mc === 1) { + ({ plaintext, valid } = this.readMessageB(session.hs, message)) + } else if (session.mc === 2) { + const { h, plaintext: resultingPlaintext, valid: resultingValid, cs1, cs2 } = this.readMessageC(session.hs, message) + plaintext = resultingPlaintext + valid = resultingValid + session.h = h + session.cs1 = cs1 + session.cs2 = cs2 + } + session.mc++ + return { plaintext, valid } + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/index.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/index.ts new file mode 100644 index 000000000..c4397f08a --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/index.ts @@ -0,0 +1,15 @@ +import { Noise } from './noise.js' +import type { NoiseInit } from './noise.js' +import type { NoiseExtensions } from './proto/payload.js' +import type { ComponentLogger, ConnectionEncrypter, Metrics } from '@libp2p/interface' +export type { ICryptoInterface } from './crypto.js' +export { pureJsCrypto } from './crypto/js.js' + +export interface NoiseComponents { + logger: ComponentLogger + metrics?: Metrics +} + +export function noise (init: NoiseInit = {}): (components: NoiseComponents) => ConnectionEncrypter { + return (components: NoiseComponents) => new Noise(components, init) +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/logger.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/logger.ts new file mode 100644 index 000000000..c57b456fa --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/logger.ts @@ -0,0 +1,57 @@ +import { toString as uint8ArrayToString } from 'uint8arrays/to-string' +import { DUMP_SESSION_KEYS } from './constants.js' +import type { NoiseSession } from './@types/handshake.js' +import type { KeyPair } from './@types/libp2p.js' +import type { Logger } from '@libp2p/interface' +import type { Uint8ArrayList } from 'uint8arraylist' + +export function logLocalStaticKeys (s: KeyPair, keyLogger: Logger): void { + if (!keyLogger.enabled || !DUMP_SESSION_KEYS) { + return + } + + keyLogger(`LOCAL_STATIC_PUBLIC_KEY ${uint8ArrayToString(s.publicKey, 'hex')}`) + keyLogger(`LOCAL_STATIC_PRIVATE_KEY ${uint8ArrayToString(s.privateKey, 'hex')}`) +} + +export function logLocalEphemeralKeys (e: KeyPair | undefined, keyLogger: Logger): void { + if (!keyLogger.enabled || !DUMP_SESSION_KEYS) { + return + } + + if (e) { + keyLogger(`LOCAL_PUBLIC_EPHEMERAL_KEY ${uint8ArrayToString(e.publicKey, 'hex')}`) + keyLogger(`LOCAL_PRIVATE_EPHEMERAL_KEY ${uint8ArrayToString(e.privateKey, 'hex')}`) + } else { + keyLogger('Missing local ephemeral keys.') + } +} + +export function logRemoteStaticKey (rs: Uint8Array | Uint8ArrayList, keyLogger: Logger): void { + if (!keyLogger.enabled || !DUMP_SESSION_KEYS) { + return + } + + keyLogger(`REMOTE_STATIC_PUBLIC_KEY ${uint8ArrayToString(rs.subarray(), 'hex')}`) +} + +export function logRemoteEphemeralKey (re: Uint8Array | Uint8ArrayList, keyLogger: Logger): void { + if (!keyLogger.enabled || !DUMP_SESSION_KEYS) { + return + } + + keyLogger(`REMOTE_EPHEMERAL_PUBLIC_KEY ${uint8ArrayToString(re.subarray(), 'hex')}`) +} + +export function logCipherState (session: NoiseSession, keyLogger: Logger): void { + if (!keyLogger.enabled || !DUMP_SESSION_KEYS) { + return + } + + if (session.cs1 && session.cs2) { + keyLogger(`CIPHER_STATE_1 ${session.cs1.n.getUint64()} ${uint8ArrayToString(session.cs1.k, 'hex')}`) + keyLogger(`CIPHER_STATE_2 ${session.cs2.n.getUint64()} ${uint8ArrayToString(session.cs2.k, 'hex')}`) + } else { + keyLogger('Missing cipher state.') + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/metrics.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/metrics.ts new file mode 100644 index 000000000..3733d4192 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/metrics.ts @@ -0,0 +1,32 @@ +import type { Counter, Metrics } from '@libp2p/interface' + +export type MetricsRegistry = Record + +export function registerMetrics (metrics: Metrics): MetricsRegistry { + return { + xxHandshakeSuccesses: metrics.registerCounter( + 'libp2p_noise_xxhandshake_successes_total', { + help: 'Total count of noise xxHandshakes successes_' + }), + + xxHandshakeErrors: metrics.registerCounter( + 'libp2p_noise_xxhandshake_error_total', { + help: 'Total count of noise xxHandshakes errors' + }), + + encryptedPackets: metrics.registerCounter( + 'libp2p_noise_encrypted_packets_total', { + help: 'Total count of noise encrypted packets successfully' + }), + + decryptedPackets: metrics.registerCounter( + 'libp2p_noise_decrypted_packets_total', { + help: 'Total count of noise decrypted packets' + }), + + decryptErrors: metrics.registerCounter( + 'libp2p_noise_decrypt_errors_total', { + help: 'Total count of noise decrypt errors' + }) + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/noise.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/noise.ts new file mode 100644 index 000000000..1313691ae --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/noise.ts @@ -0,0 +1,202 @@ +import { decode } from 'it-length-prefixed' +import { lpStream, type LengthPrefixedStream } from 'it-length-prefixed-stream' +import { duplexPair } from 'it-pair/duplex' +import { pipe } from 'it-pipe' +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc' +import { NOISE_MSG_MAX_LENGTH_BYTES } from './constants.js' +import { defaultCrypto } from './crypto/index.js' +import { decryptStream, encryptStream } from './crypto/streaming.js' +import { uint16BEDecode, uint16BEEncode } from './encoder.js' +import { XXHandshake } from './handshake-xx.js' +import { type MetricsRegistry, registerMetrics } from './metrics.js' +import { getPayload } from './utils.js' +import type { bytes } from './@types/basic.js' +import type { IHandshake } from './@types/handshake-interface.js' +import type { INoiseConnection, KeyPair } from './@types/libp2p.js' +import type { ICryptoInterface } from './crypto.js' +import type { NoiseComponents } from './index.js' +import type { NoiseExtensions } from './proto/payload.js' +import type { MultiaddrConnection, SecuredConnection, PeerId } from '@libp2p/interface' +import type { Duplex } from 'it-stream-types' +import type { Uint8ArrayList } from 'uint8arraylist' + +interface HandshakeParams { + connection: LengthPrefixedStream + isInitiator: boolean + localPeer: PeerId + remotePeer?: PeerId +} + +export interface NoiseInit { + /** + * x25519 private key, reuse for faster handshakes + */ + staticNoiseKey?: bytes + extensions?: NoiseExtensions + crypto?: ICryptoInterface + prologueBytes?: Uint8Array +} + +export class Noise implements INoiseConnection { + public protocol = '/noise' + public crypto: ICryptoInterface + + private readonly prologue: Uint8Array + private readonly staticKeys: KeyPair + private readonly extensions?: NoiseExtensions + private readonly metrics?: MetricsRegistry + private readonly components: NoiseComponents + + constructor (components: NoiseComponents, init: NoiseInit = {}) { + const { staticNoiseKey, extensions, crypto, prologueBytes } = init + const { metrics } = components + + this.components = components + this.crypto = crypto ?? defaultCrypto + this.extensions = extensions + this.metrics = metrics ? registerMetrics(metrics) : undefined + + if (staticNoiseKey) { + // accepts x25519 private key of length 32 + this.staticKeys = this.crypto.generateX25519KeyPairFromSeed(staticNoiseKey) + } else { + this.staticKeys = this.crypto.generateX25519KeyPair() + } + this.prologue = prologueBytes ?? uint8ArrayAlloc(0) + } + + /** + * Encrypt outgoing data to the remote party (handshake as initiator) + * + * @param {PeerId} localPeer - PeerId of the receiving peer + * @param {Stream} connection - streaming iterable duplex that will be encrypted + * @param {PeerId} remotePeer - PeerId of the remote peer. Used to validate the integrity of the remote peer. + * @returns {Promise>} + */ + public async secureOutbound > = MultiaddrConnection> (localPeer: PeerId, connection: Stream, remotePeer?: PeerId): Promise> { + const wrappedConnection = lpStream( + connection, + { + lengthEncoder: uint16BEEncode, + lengthDecoder: uint16BEDecode, + maxDataLength: NOISE_MSG_MAX_LENGTH_BYTES + } + ) + const handshake = await this.performHandshake({ + connection: wrappedConnection, + isInitiator: true, + localPeer, + remotePeer + }) + const conn = await this.createSecureConnection(wrappedConnection, handshake) + + connection.source = conn.source + connection.sink = conn.sink + + return { + conn: connection, + remoteExtensions: handshake.remoteExtensions, + remotePeer: handshake.remotePeer + } + } + + /** + * Decrypt incoming data (handshake as responder). + * + * @param {PeerId} localPeer - PeerId of the receiving peer. + * @param {Stream} connection - streaming iterable duplex that will be encrypted. + * @param {PeerId} remotePeer - optional PeerId of the initiating peer, if known. This may only exist during transport upgrades. + * @returns {Promise>} + */ + public async secureInbound > = MultiaddrConnection> (localPeer: PeerId, connection: Stream, remotePeer?: PeerId): Promise> { + const wrappedConnection = lpStream( + connection, + { + lengthEncoder: uint16BEEncode, + lengthDecoder: uint16BEDecode, + maxDataLength: NOISE_MSG_MAX_LENGTH_BYTES + } + ) + const handshake = await this.performHandshake({ + connection: wrappedConnection, + isInitiator: false, + localPeer, + remotePeer + }) + const conn = await this.createSecureConnection(wrappedConnection, handshake) + + connection.source = conn.source + connection.sink = conn.sink + + return { + conn: connection, + remotePeer: handshake.remotePeer, + remoteExtensions: handshake.remoteExtensions + } + } + + /** + * If Noise pipes supported, tries IK handshake first with XX as fallback if it fails. + * If noise pipes disabled or remote peer static key is unknown, use XX. + * + * @param {HandshakeParams} params + */ + private async performHandshake (params: HandshakeParams): Promise { + const payload = await getPayload(params.localPeer, this.staticKeys.publicKey, this.extensions) + + // run XX handshake + return this.performXXHandshake(params, payload) + } + + private async performXXHandshake ( + params: HandshakeParams, + payload: bytes + ): Promise { + const { isInitiator, remotePeer, connection } = params + const handshake = new XXHandshake( + this.components, + isInitiator, + payload, + this.prologue, + this.crypto, + this.staticKeys, + connection, + remotePeer + ) + + try { + await handshake.propose() + await handshake.exchange() + await handshake.finish() + this.metrics?.xxHandshakeSuccesses.increment() + } catch (e: unknown) { + this.metrics?.xxHandshakeErrors.increment() + if (e instanceof Error) { + e.message = `Error occurred during XX handshake: ${e.message}` + throw e + } + } + + return handshake + } + + private async createSecureConnection ( + connection: LengthPrefixedStream>>, + handshake: IHandshake + ): Promise>> { + // Create encryption box/unbox wrapper + const [secure, user] = duplexPair() + const network = connection.unwrap() + + await pipe( + secure, // write to wrapper + encryptStream(handshake, this.metrics), // encrypt data + prefix with message length + network, // send to the remote peer + (source) => decode(source, { lengthDecoder: uint16BEDecode }), // read message length prefix + decryptStream(handshake, this.metrics), // decrypt the incoming data + secure // pipe to the wrapper + ) + + return user + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/nonce.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/nonce.ts new file mode 100644 index 000000000..e19183dd8 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/nonce.ts @@ -0,0 +1,50 @@ +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc' +import type { bytes, uint64 } from './@types/basic.js' + +export const MIN_NONCE = 0 +// For performance reasons, the nonce is represented as a JS `number` +// Although JS `number` can safely represent integers up to 2 ** 53 - 1, we choose to only use +// 4 bytes to store the data for performance reason. +// This is a slight deviation from the noise spec, which describes the max nonce as 2 ** 64 - 2 +// The effect is that this implementation will need a new handshake to be performed after fewer messages are exchanged than other implementations with full uint64 nonces. +// this MAX_NONCE is still a large number of messages, so the practical effect of this is negligible. +export const MAX_NONCE = 0xffffffff + +const ERR_MAX_NONCE = 'Cipherstate has reached maximum n, a new handshake must be performed' + +/** + * The nonce is an uint that's increased over time. + * Maintaining different representations help improve performance. + */ +export class Nonce { + private n: uint64 + private readonly bytes: bytes + private readonly view: DataView + + constructor (n = MIN_NONCE) { + this.n = n + this.bytes = uint8ArrayAlloc(12) + this.view = new DataView(this.bytes.buffer, this.bytes.byteOffset, this.bytes.byteLength) + this.view.setUint32(4, n, true) + } + + increment (): void { + this.n++ + // Even though we're treating the nonce as 8 bytes, RFC7539 specifies 12 bytes for a nonce. + this.view.setUint32(4, this.n, true) + } + + getBytes (): bytes { + return this.bytes + } + + getUint64 (): uint64 { + return this.n + } + + assertValue (): void { + if (this.n > MAX_NONCE) { + throw new Error(ERR_MAX_NONCE) + } + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/proto/payload.proto b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/proto/payload.proto new file mode 100644 index 000000000..cdb2383cb --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/proto/payload.proto @@ -0,0 +1,11 @@ +syntax = "proto3"; + +message NoiseExtensions { + repeated bytes webtransport_certhashes = 1; +} + +message NoiseHandshakePayload { + bytes identity_key = 1; + bytes identity_sig = 2; + optional NoiseExtensions extensions = 4; +} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/proto/payload.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/proto/payload.ts new file mode 100644 index 000000000..5f8d5100f --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/proto/payload.ts @@ -0,0 +1,152 @@ +/* eslint-disable import/export */ +/* eslint-disable complexity */ +/* eslint-disable @typescript-eslint/no-namespace */ +/* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */ +/* eslint-disable @typescript-eslint/no-empty-interface */ + +import { type Codec, decodeMessage, encodeMessage, message } from 'protons-runtime' +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc' +import type { Uint8ArrayList } from 'uint8arraylist' + +export interface NoiseExtensions { + webtransportCerthashes: Uint8Array[] +} + +export namespace NoiseExtensions { + let _codec: Codec + + export const codec = (): Codec => { + if (_codec == null) { + _codec = message((obj, w, opts = {}) => { + if (opts.lengthDelimited !== false) { + w.fork() + } + + if (obj.webtransportCerthashes != null) { + for (const value of obj.webtransportCerthashes) { + w.uint32(10) + w.bytes(value) + } + } + + if (opts.lengthDelimited !== false) { + w.ldelim() + } + }, (reader, length) => { + const obj: any = { + webtransportCerthashes: [] + } + + const end = length == null ? reader.len : reader.pos + length + + while (reader.pos < end) { + const tag = reader.uint32() + + switch (tag >>> 3) { + case 1: { + obj.webtransportCerthashes.push(reader.bytes()) + break + } + default: { + reader.skipType(tag & 7) + break + } + } + } + + return obj + }) + } + + return _codec + } + + export const encode = (obj: Partial): Uint8Array => { + return encodeMessage(obj, NoiseExtensions.codec()) + } + + export const decode = (buf: Uint8Array | Uint8ArrayList): NoiseExtensions => { + return decodeMessage(buf, NoiseExtensions.codec()) + } +} + +export interface NoiseHandshakePayload { + identityKey: Uint8Array + identitySig: Uint8Array + extensions?: NoiseExtensions +} + +export namespace NoiseHandshakePayload { + let _codec: Codec + + export const codec = (): Codec => { + if (_codec == null) { + _codec = message((obj, w, opts = {}) => { + if (opts.lengthDelimited !== false) { + w.fork() + } + + if ((obj.identityKey != null && obj.identityKey.byteLength > 0)) { + w.uint32(10) + w.bytes(obj.identityKey) + } + + if ((obj.identitySig != null && obj.identitySig.byteLength > 0)) { + w.uint32(18) + w.bytes(obj.identitySig) + } + + if (obj.extensions != null) { + w.uint32(34) + NoiseExtensions.codec().encode(obj.extensions, w) + } + + if (opts.lengthDelimited !== false) { + w.ldelim() + } + }, (reader, length) => { + const obj: any = { + identityKey: uint8ArrayAlloc(0), + identitySig: uint8ArrayAlloc(0) + } + + const end = length == null ? reader.len : reader.pos + length + + while (reader.pos < end) { + const tag = reader.uint32() + + switch (tag >>> 3) { + case 1: { + obj.identityKey = reader.bytes() + break + } + case 2: { + obj.identitySig = reader.bytes() + break + } + case 4: { + obj.extensions = NoiseExtensions.codec().decode(reader, reader.uint32()) + break + } + default: { + reader.skipType(tag & 7) + break + } + } + } + + return obj + }) + } + + return _codec + } + + export const encode = (obj: Partial): Uint8Array => { + return encodeMessage(obj, NoiseHandshakePayload.codec()) + } + + export const decode = (buf: Uint8Array | Uint8ArrayList): NoiseHandshakePayload => { + return decodeMessage(buf, NoiseHandshakePayload.codec()) + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/utils.ts b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/utils.ts new file mode 100644 index 000000000..d6fc84939 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/noise/src/utils.ts @@ -0,0 +1,119 @@ +import { unmarshalPublicKey, unmarshalPrivateKey } from '@libp2p/crypto/keys' +import { peerIdFromKeys } from '@libp2p/peer-id' +import { type Uint8ArrayList, isUint8ArrayList } from 'uint8arraylist' +import { concat as uint8ArrayConcat } from 'uint8arrays/concat' +import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string' +import { type NoiseExtensions, NoiseHandshakePayload } from './proto/payload.js' +import type { bytes } from './@types/basic.js' +import type { PeerId } from '@libp2p/interface' + +export async function getPayload ( + localPeer: PeerId, + staticPublicKey: bytes, + extensions?: NoiseExtensions +): Promise { + const signedPayload = await signPayload(localPeer, getHandshakePayload(staticPublicKey)) + + if (localPeer.publicKey == null) { + throw new Error('PublicKey was missing from local PeerId') + } + + return createHandshakePayload( + localPeer.publicKey, + signedPayload, + extensions + ) +} + +export function createHandshakePayload ( + libp2pPublicKey: Uint8Array, + signedPayload: Uint8Array, + extensions?: NoiseExtensions +): bytes { + return NoiseHandshakePayload.encode({ + identityKey: libp2pPublicKey, + identitySig: signedPayload, + extensions: extensions ?? { webtransportCerthashes: [] } + }).subarray() +} + +export async function signPayload (peerId: PeerId, payload: Uint8Array | Uint8ArrayList): Promise { + if (peerId.privateKey == null) { + throw new Error('PrivateKey was missing from PeerId') + } + + const privateKey = await unmarshalPrivateKey(peerId.privateKey) + + return privateKey.sign(payload) +} + +export async function getPeerIdFromPayload (payload: NoiseHandshakePayload): Promise { + return peerIdFromKeys(payload.identityKey) +} + +export function decodePayload (payload: Uint8Array | Uint8ArrayList): NoiseHandshakePayload { + return NoiseHandshakePayload.decode(payload) +} + +export function getHandshakePayload (publicKey: Uint8Array | Uint8ArrayList): Uint8Array | Uint8ArrayList { + const prefix = uint8ArrayFromString('noise-libp2p-static-key:') + + if (publicKey instanceof Uint8Array) { + return uint8ArrayConcat([prefix, publicKey], prefix.length + publicKey.length) + } + + publicKey.prepend(prefix) + + return publicKey +} + +/** + * Verifies signed payload, throws on any irregularities. + * + * @param {bytes} noiseStaticKey - owner's noise static key + * @param {bytes} payload - decoded payload + * @param {PeerId} remotePeer - owner's libp2p peer ID + * @returns {Promise} - peer ID of payload owner + */ +export async function verifySignedPayload ( + noiseStaticKey: Uint8Array | Uint8ArrayList, + payload: NoiseHandshakePayload, + remotePeer: PeerId +): Promise { + // Unmarshaling from PublicKey protobuf + const payloadPeerId = await peerIdFromKeys(payload.identityKey) + if (!payloadPeerId.equals(remotePeer)) { + throw new Error(`Payload identity key ${payloadPeerId.toString()} does not match expected remote peer ${remotePeer.toString()}`) + } + const generatedPayload = getHandshakePayload(noiseStaticKey) + + if (payloadPeerId.publicKey == null) { + throw new Error('PublicKey was missing from PeerId') + } + + if (payload.identitySig == null) { + throw new Error('Signature was missing from message') + } + + const publicKey = unmarshalPublicKey(payloadPeerId.publicKey) + + const valid = await publicKey.verify(generatedPayload, payload.identitySig) + + if (!valid) { + throw new Error("Static key doesn't match to peer that signed payload!") + } + + return payloadPeerId +} + +export function isValidPublicKey (pk: Uint8Array | Uint8ArrayList): boolean { + if (!(pk instanceof Uint8Array) && !(isUint8ArrayList(pk))) { + return false + } + + if (pk.byteLength !== 32) { + return false + } + + return true +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/package-lock.json b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/package-lock.json new file mode 100644 index 000000000..1e9ef02e1 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/package-lock.json @@ -0,0 +1,911 @@ +{ + "name": "@libp2p/perf-js-libp2p-1-0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@libp2p/perf-js-libp2p-1-0", + "dependencies": { + "@chainsafe/libp2p-noise": "file:./noise", + "@chainsafe/libp2p-yamux": "^6.0.1", + "@libp2p/perf": "^3.0.4", + "@libp2p/tcp": "^9.0.4", + "libp2p": "^1.0.5" + } + }, + "node_modules/@chainsafe/as-chacha20poly1305": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@chainsafe/as-chacha20poly1305/-/as-chacha20poly1305-0.1.0.tgz", + "integrity": "sha512-BpNcL8/lji/GM3+vZ/bgRWqJ1q5kwvTFmGPk7pxm/QQZDbaMI98waOHjEymTjq2JmdD/INdNBFOVSyJofXg7ew==" + }, + "node_modules/@chainsafe/as-sha256": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.4.1.tgz", + "integrity": "sha512-IqeeGwQihK6Y2EYLFofqs2eY2ep1I2MvQXHzOAI+5iQN51OZlUkrLgyAugu2x86xZewDk5xas7lNczkzFzF62w==" + }, + "node_modules/@chainsafe/is-ip": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@chainsafe/is-ip/-/is-ip-2.0.2.tgz", + "integrity": "sha512-ndGqEMG1W5WkGagaqOZHpPU172AGdxr+LD15sv3WIUvT5oCFUrG1Y0CW/v2Egwj4JXEvSibaIIIqImsm98y1nA==" + }, + "node_modules/@chainsafe/libp2p-noise": { + "resolved": "noise", + "link": true + }, + "node_modules/@chainsafe/libp2p-yamux": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-yamux/-/libp2p-yamux-6.0.1.tgz", + "integrity": "sha512-8ar6jph9ZuUUxQ8t8W1MaZqH7f7KvGK2wR7TDGnN0r4QtZc07ICNgVjnolnI9/8bclrI5Um4uMa8QCYKTrdvDQ==", + "dependencies": { + "@libp2p/interface": "^1.0.0", + "@libp2p/utils": "^5.0.0", + "get-iterator": "^2.0.1", + "it-foreach": "^2.0.3", + "it-pipe": "^3.0.1", + "it-pushable": "^3.2.0", + "uint8arraylist": "^2.4.3" + } + }, + "node_modules/@chainsafe/netmask": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@chainsafe/netmask/-/netmask-2.0.0.tgz", + "integrity": "sha512-I3Z+6SWUoaljh3TBzCnCxjlUyN8tA+NAk5L6m9IxvCf1BENQTePzPMis97CoN/iMW1St3WN+AWCCRp+TTBRiDg==", + "dependencies": { + "@chainsafe/is-ip": "^2.0.1" + } + }, + "node_modules/@libp2p/crypto": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-3.0.1.tgz", + "integrity": "sha512-CvqzsWvAYaga/Du3gDRChN9d8PUnOoCQg3VlugKf6tfw5+1pd7sMDhyMLajXqFsWqQUY6FojgB1TS4izpODMpw==", + "dependencies": { + "@libp2p/interface": "^1.0.1", + "@noble/curves": "^1.1.0", + "@noble/hashes": "^1.3.1", + "multiformats": "^12.1.3", + "node-forge": "^1.1.0", + "protons-runtime": "^5.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@libp2p/interface": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-1.0.1.tgz", + "integrity": "sha512-TRo1YxJ+AVjt5ms+mTOp8xcoCis5HAUMzv0XfCvxtIw77Bog6TPR5VdkGutlEQOKUMzXtLP0lW88fTQBeiiOnA==", + "dependencies": { + "@multiformats/multiaddr": "^12.1.10", + "it-pushable": "^3.2.1", + "it-stream-types": "^2.0.1", + "multiformats": "^12.1.3", + "uint8arraylist": "^2.4.3" + } + }, + "node_modules/@libp2p/interface-internal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-internal/-/interface-internal-1.0.1.tgz", + "integrity": "sha512-mJ2uWPzjnIk9Y1/Ca/xk0coz8PCg8tnAQgxN+GNG0cdAbY6Wu7dNDm0P3aTh9NYfjCp+5nzSSEE2UW/nr7TB9Q==", + "dependencies": { + "@libp2p/interface": "^1.0.1", + "@libp2p/peer-collections": "^5.0.0", + "@multiformats/multiaddr": "^12.1.10", + "uint8arraylist": "^2.4.3" + } + }, + "node_modules/@libp2p/logger": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-4.0.1.tgz", + "integrity": "sha512-d7kJmbkphNvEI3Da4so+4nxUJhwW/T/d8Pd+aQIuT27RYNeVoRfkFkjYwPIP+NvJXtU4LDju7VDPLbPbU2zFGA==", + "dependencies": { + "@libp2p/interface": "^1.0.1", + "@multiformats/multiaddr": "^12.1.10", + "debug": "^4.3.4", + "interface-datastore": "^8.2.0", + "multiformats": "^12.1.3" + } + }, + "node_modules/@libp2p/multistream-select": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/multistream-select/-/multistream-select-5.0.0.tgz", + "integrity": "sha512-1y4b8he9djNQYteKFRnDisryOGV70SQOaSuiNJgKaIPFFJ9DwYbz/ZCV0k0Ld4zqB4Ncm8ibBmyYuZg+yoOBuQ==", + "dependencies": { + "@libp2p/interface": "^1.0.1", + "it-length-prefixed": "^9.0.3", + "it-length-prefixed-stream": "^1.1.1", + "it-pipe": "^3.0.1", + "it-stream-types": "^2.0.1", + "p-defer": "^4.0.0", + "uint8-varint": "^2.0.2", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@libp2p/peer-collections": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-5.0.0.tgz", + "integrity": "sha512-2h6BF6t68TxnsErZrPzkMapH0GpZSCmOaimUMidrs9oSnxIMf62QnNAbfar8U2XbXnPJD9WkEicnSuJgDwg8Vw==", + "dependencies": { + "@libp2p/interface": "^1.0.1", + "@libp2p/peer-id": "^4.0.1" + } + }, + "node_modules/@libp2p/peer-id": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-4.0.1.tgz", + "integrity": "sha512-rEgZ4YPSVh7gqIXxWE9HVw318Og8fJohI2vWXNx2h+Ib/iMQTGrqGgSaJhjUMWYIy8MadpjofCPXObPEIX3E3g==", + "dependencies": { + "@libp2p/interface": "^1.0.1", + "multiformats": "^12.1.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@libp2p/peer-id-factory": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id-factory/-/peer-id-factory-4.0.0.tgz", + "integrity": "sha512-dFbQOpxqEw4CqV+ZalMc5UABqts+hskMoaqytjmR55pXgL4KDamOyg7hBT/HrHRp2sStf8E2vwQ5wnjv1W9uFQ==", + "dependencies": { + "@libp2p/crypto": "^3.0.1", + "@libp2p/interface": "^1.0.1", + "@libp2p/peer-id": "^4.0.1", + "multiformats": "^12.1.3", + "protons-runtime": "^5.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@libp2p/peer-record": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-7.0.0.tgz", + "integrity": "sha512-Kr5XgyRzqJjK4rBu+QA2e2zGT59rp2OKD8kviwpE4NwKWyDs85JaRduorso9KujJG/F0uZI8tOhPjadO1Lwatw==", + "dependencies": { + "@libp2p/crypto": "^3.0.1", + "@libp2p/interface": "^1.0.1", + "@libp2p/peer-id": "^4.0.1", + "@libp2p/utils": "^5.0.2", + "@multiformats/multiaddr": "^12.1.10", + "protons-runtime": "^5.0.0", + "uint8-varint": "^2.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@libp2p/peer-store": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/peer-store/-/peer-store-10.0.0.tgz", + "integrity": "sha512-DQilgZXfwokKTbr1EDQssIfn5bAMLCEUronhqy9VEIrF7mkiSqjsBtOcftDEJT4dXhDOV8F7mifznvJI32tZIA==", + "dependencies": { + "@libp2p/interface": "^1.0.1", + "@libp2p/peer-collections": "^5.0.0", + "@libp2p/peer-id": "^4.0.1", + "@libp2p/peer-id-factory": "^4.0.0", + "@libp2p/peer-record": "^7.0.0", + "@multiformats/multiaddr": "^12.1.10", + "interface-datastore": "^8.2.0", + "it-all": "^3.0.2", + "mortice": "^3.0.1", + "multiformats": "^12.1.3", + "protons-runtime": "^5.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@libp2p/perf": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/perf/-/perf-3.0.4.tgz", + "integrity": "sha512-keoLx6WkhWn+W5IA6Y4m/N1JxfLdpReXdDmrNMDwoLFsymWI0KmCUq/wQRT3l2T+xRlSPthg+Q7/QabJDSU3ig==", + "dependencies": { + "@libp2p/interface": "^1.0.1", + "@libp2p/interface-internal": "^1.0.1", + "@multiformats/multiaddr": "^12.1.10", + "it-pushable": "^3.2.3" + } + }, + "node_modules/@libp2p/tcp": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/tcp/-/tcp-9.0.4.tgz", + "integrity": "sha512-q3wAZMhEUXIEKnHPPHEjcO564P7pIkCWazC8SUGIPRLbmuSnni8cT2kd/Jx6xSv5ZOK2LHzJSKodLlpfi1Gmzg==", + "dependencies": { + "@libp2p/interface": "^1.0.1", + "@libp2p/utils": "^5.0.2", + "@multiformats/mafmt": "^12.1.6", + "@multiformats/multiaddr": "^12.1.10", + "@types/sinon": "^17.0.0", + "stream-to-it": "^0.2.2" + } + }, + "node_modules/@libp2p/utils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-5.0.2.tgz", + "integrity": "sha512-PcDAH8pwtXq0pfoO9arHtg3CsqF+reheUd0OaQ9/Fn0YjjNpqcpseQyByBiwhiuQsauWo5RU+CKqRaRdvXKemA==", + "dependencies": { + "@chainsafe/is-ip": "^2.0.2", + "@libp2p/interface": "^1.0.1", + "@multiformats/multiaddr": "^12.1.10", + "@multiformats/multiaddr-matcher": "^1.1.0", + "get-iterator": "^2.0.1", + "is-loopback-addr": "^2.0.1", + "it-pushable": "^3.2.2", + "it-stream-types": "^2.0.1", + "p-queue": "^7.4.1", + "private-ip": "^3.0.1", + "race-signal": "^1.0.1", + "uint8arraylist": "^2.4.3" + } + }, + "node_modules/@multiformats/mafmt": { + "version": "12.1.6", + "resolved": "https://registry.npmjs.org/@multiformats/mafmt/-/mafmt-12.1.6.tgz", + "integrity": "sha512-tlJRfL21X+AKn9b5i5VnaTD6bNttpSpcqwKVmDmSHLwxoz97fAHaepqFOk/l1fIu94nImIXneNbhsJx/RQNIww==", + "dependencies": { + "@multiformats/multiaddr": "^12.0.0" + } + }, + "node_modules/@multiformats/multiaddr": { + "version": "12.1.11", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.1.11.tgz", + "integrity": "sha512-CWG9kETEGTTMdr1T+/JEuMwFld3r3fHNP8LkLoUcLvHRy6yr8sWdotVGEDNEdDO/vrKhuD7bQBws3xMSMMyylg==", + "dependencies": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^1.0.0", + "dns-over-http-resolver": "3.0.0", + "multiformats": "^12.0.1", + "uint8-varint": "^2.0.1", + "uint8arrays": "^4.0.2" + } + }, + "node_modules/@multiformats/multiaddr-matcher": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-matcher/-/multiaddr-matcher-1.1.0.tgz", + "integrity": "sha512-B/QbKpAxaHYVXFnbTdTgYqPDxmqoF2RYffwYoOv1MWfi2vBCZLdzmEKUBKv6fQr6s+LJFSHn2j2vczmwMFCQIA==", + "dependencies": { + "@chainsafe/is-ip": "^2.0.1", + "@multiformats/multiaddr": "^12.0.0", + "multiformats": "^12.0.1" + } + }, + "node_modules/@noble/ciphers": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.4.0.tgz", + "integrity": "sha512-xaUaUUDWbHIFSxaQ/pIe+33VG2mfJp6N/KxKLmZr5biWdNznCAmfu24QRhX10BbVAuqOahAoyp0S4M9md6GPDw==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@types/sinon": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.2.tgz", + "integrity": "sha512-Zt6heIGsdqERkxctIpvN5Pv3edgBrhoeb3yHyxffd4InN0AX2SVNKSrhdDZKGQICVOxWP/q4DyhpfPNMSrpIiA==", + "dependencies": { + "@types/sinonjs__fake-timers": "*" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", + "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==" + }, + "node_modules/any-signal": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-4.1.1.tgz", + "integrity": "sha512-iADenERppdC+A2YKbOXXB2WUeABLaM6qnpZ70kZbPZ1cZMMJ7eF+3CaYm+/PhBizgkzlvssC7QuHS30oOiQYWA==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/datastore-core": { + "version": "9.2.5", + "resolved": "https://registry.npmjs.org/datastore-core/-/datastore-core-9.2.5.tgz", + "integrity": "sha512-3Z54iBjwj4KDp5Se4aZRYWnjv1OlQgPfrEF2X+T9rlet8Pe3AKRLVYx0v+11PuL+47d7w0Vc/4847Ylas6fEbQ==", + "dependencies": { + "@libp2p/logger": "^4.0.1", + "err-code": "^3.0.1", + "interface-store": "^5.0.0", + "it-all": "^3.0.1", + "it-drain": "^3.0.1", + "it-filter": "^3.0.0", + "it-map": "^3.0.1", + "it-merge": "^3.0.1", + "it-pipe": "^3.0.0", + "it-pushable": "^3.0.0", + "it-sort": "^3.0.1", + "it-take": "^3.0.1", + "uint8arrays": "^4.0.2" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/delay": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/delay/-/delay-6.0.0.tgz", + "integrity": "sha512-2NJozoOHQ4NuZuVIr5CWd0iiLVIRSDepakaovIN+9eIDHEhdCAEvSy2cuf1DCrPPQLvHmbqTHODlhHg8UCy4zw==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dns-over-http-resolver": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-3.0.0.tgz", + "integrity": "sha512-5+BI+B7n8LKhNaEZBYErr+CBd9t5nYtjunByLhrLGtZ+i3TRgiU8yE87pCjEBu2KOwNsD9ljpSXEbZ4S8xih5g==", + "dependencies": { + "debug": "^4.3.4", + "receptacle": "^1.3.2" + } + }, + "node_modules/err-code": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", + "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "node_modules/get-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.1.tgz", + "integrity": "sha512-7HuY/hebu4gryTDT7O/XY/fvY9wRByEGdK6QOa4of8npTcv0+NS6frFKABcf6S9EBAsveTuKTsZQQBFMMNILIg==" + }, + "node_modules/interface-datastore": { + "version": "8.2.7", + "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-8.2.7.tgz", + "integrity": "sha512-ot5B5+VogufRfjhedAXZHm5NuEKyYZkDyVpTjBYIrxYUpS5GIfF2soE/dsd/FiBVqubcxa4IEToMXL5ruMwhjw==", + "dependencies": { + "interface-store": "^5.0.0", + "nanoid": "^5.0.3", + "uint8arrays": "^4.0.2" + } + }, + "node_modules/interface-store": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-5.1.5.tgz", + "integrity": "sha512-X0KnJBk3o+YL13MxZBMwa88/b3Mdrpm0yPzkSTKDDVn9BSPH7UK6W+ZtIPO2bxKOQVmq7zqOwAnYnpfqWjb6/g==" + }, + "node_modules/ip-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz", + "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-electron": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz", + "integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==" + }, + "node_modules/is-loopback-addr": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.2.tgz", + "integrity": "sha512-26POf2KRCno/KTNL5Q0b/9TYnL00xEsSaLfiFRmjM7m7Lw7ZMmFybzzuX4CcsLAluZGd+niLUiMRxEooVE3aqg==" + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/it-all": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/it-all/-/it-all-3.0.4.tgz", + "integrity": "sha512-UMiy0i9DqCHBdWvMbzdYvVGa5/w4t1cc4nchpbnjdLhklglv8mQeEYnii0gvKESJuL1zV32Cqdb33R6/GPfxpQ==" + }, + "node_modules/it-byte-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/it-byte-stream/-/it-byte-stream-1.0.5.tgz", + "integrity": "sha512-wGHbXPE0ZiU0poJTgCNOW06+mh9yyCwdF8bVv0zxchgql6CMQd/2NEXXtmwWE+N65st8bi/KWUWcMU2pJU2fEw==", + "dependencies": { + "it-stream-types": "^2.0.1", + "p-defer": "^4.0.0", + "race-signal": "^1.0.1", + "uint8arraylist": "^2.4.1" + } + }, + "node_modules/it-drain": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/it-drain/-/it-drain-3.0.5.tgz", + "integrity": "sha512-qYFe4SWdvs9oJGUY5bSjvmiLUMLzFEODNOQUdYdCIkuIgQF+AUB2INhM4yQ09buJ2rhHKDFxvTD/+yUq6qg0XA==" + }, + "node_modules/it-filter": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/it-filter/-/it-filter-3.0.4.tgz", + "integrity": "sha512-e0sz+st4sudK/zH6GZ/gRTRP8A/ADuJFCYDmRgMbZvR79y5+v4ZXav850bBZk5wL9zXaYZFxS1v/6Qi+Vjwh5g==", + "dependencies": { + "it-peekable": "^3.0.0" + } + }, + "node_modules/it-first": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/it-first/-/it-first-3.0.4.tgz", + "integrity": "sha512-FtQl84iTNxN5EItP/JgL28V2rzNMkCzTUlNoj41eVdfix2z1DBuLnBqZ0hzYhGGa1rMpbQf0M7CQSA2adlrLJg==" + }, + "node_modules/it-foreach": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/it-foreach/-/it-foreach-2.0.6.tgz", + "integrity": "sha512-OVosBHJsdXpAyeFlCbe3IGZia+65UykyAznakNsKXK+b99dbhuu/mOnXxTadDEo1GWhKx+WA8RNanKkMf07zQw==", + "dependencies": { + "it-peekable": "^3.0.0" + } + }, + "node_modules/it-length-prefixed": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-9.0.3.tgz", + "integrity": "sha512-YAu424ceYpXctxtjcLOqn7vJq082CaoP8J646ZusYISfQc3bpzQErgTUqMFj81V262KG2W9/YMBHsy6A/4yvmg==", + "dependencies": { + "err-code": "^3.0.1", + "it-reader": "^6.0.1", + "it-stream-types": "^2.0.1", + "uint8-varint": "^2.0.1", + "uint8arraylist": "^2.0.0", + "uint8arrays": "^4.0.2" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-length-prefixed-stream": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/it-length-prefixed-stream/-/it-length-prefixed-stream-1.1.4.tgz", + "integrity": "sha512-6YcQ5jsaYnuXBqF+oSGjSdSY9jF7HWl7yh+dxYytXxbE2GcdiOpn6pLM7m6AlIID9MCzQqMY5nOzaiatQ8A3/A==", + "dependencies": { + "it-byte-stream": "^1.0.0", + "it-length-prefixed": "^9.0.1", + "it-stream-types": "^2.0.1", + "uint8-varint": "^2.0.1", + "uint8arraylist": "^2.4.1" + } + }, + "node_modules/it-map": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/it-map/-/it-map-3.0.5.tgz", + "integrity": "sha512-hB0TDXo/h4KSJJDSRLgAPmDroiXP6Fx1ck4Bzl3US9hHfZweTKsuiP0y4gXuTMcJlS6vj0bb+f70rhkD47ZA3w==", + "dependencies": { + "it-peekable": "^3.0.0" + } + }, + "node_modules/it-merge": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/it-merge/-/it-merge-3.0.3.tgz", + "integrity": "sha512-FYVU15KC5pb/GQX1Ims+lee8d4pdqGVCpWr0lkNj8o4xuNo7jY71k6GuEiWdP+T7W1bJqewSxX5yoTy5yZpRVA==", + "dependencies": { + "it-pushable": "^3.2.0" + } + }, + "node_modules/it-pair": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/it-pair/-/it-pair-2.0.6.tgz", + "integrity": "sha512-5M0t5RAcYEQYNG5BV7d7cqbdwbCAp5yLdzvkxsZmkuZsLbTdZzah6MQySYfaAQjNDCq6PUnDt0hqBZ4NwMfW6g==", + "dependencies": { + "it-stream-types": "^2.0.1", + "p-defer": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-peekable": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/it-peekable/-/it-peekable-3.0.3.tgz", + "integrity": "sha512-Wx21JX/rMzTEl9flx3DGHuPV1KQFGOl8uoKfQtmZHgPQtGb89eQ6RyVd82h3HuP9Ghpt0WgBDlmmdWeHXqyx7w==" + }, + "node_modules/it-pipe": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-3.0.1.tgz", + "integrity": "sha512-sIoNrQl1qSRg2seYSBH/3QxWhJFn9PKYvOf/bHdtCBF0bnghey44VyASsWzn5dAx0DCDDABq1hZIuzKmtBZmKA==", + "dependencies": { + "it-merge": "^3.0.0", + "it-pushable": "^3.1.2", + "it-stream-types": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-pushable": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.2.3.tgz", + "integrity": "sha512-gzYnXYK8Y5t5b/BnJUr7glfQLO4U5vyb05gPx/TyTw+4Bv1zM9gFk4YsOrnulWefMewlphCjKkakFvj1y99Tcg==", + "dependencies": { + "p-defer": "^4.0.0" + } + }, + "node_modules/it-reader": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-6.0.4.tgz", + "integrity": "sha512-XCWifEcNFFjjBHtor4Sfaj8rcpt+FkY0L6WdhD578SCDhV4VUm7fCkF3dv5a+fTcfQqvN9BsxBTvWbYO6iCjTg==", + "dependencies": { + "it-stream-types": "^2.0.1", + "uint8arraylist": "^2.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-sort": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/it-sort/-/it-sort-3.0.4.tgz", + "integrity": "sha512-tvnC93JZZWjX4UxALy0asow0dzXabkoaRbrPJKClTKhNCqw4gzHr+H5axf1gohcthedRRkqd/ae+wl7WqoxFhw==", + "dependencies": { + "it-all": "^3.0.0" + } + }, + "node_modules/it-stream-types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/it-stream-types/-/it-stream-types-2.0.1.tgz", + "integrity": "sha512-6DmOs5r7ERDbvS4q8yLKENcj6Yecr7QQTqWApbZdfAUTEC947d+PEha7PCqhm//9oxaLYL7TWRekwhoXl2s6fg==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-take": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/it-take/-/it-take-3.0.4.tgz", + "integrity": "sha512-RG8HDjAZlvkzz5Nav4xq6gK5zNT+Ff1UTIf+CrSJW8nIl6N1FpBH5e7clUshiCn+MmmMoSdIEpw4UaTolszxhA==" + }, + "node_modules/libp2p": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-1.0.5.tgz", + "integrity": "sha512-h6JsVRCo31WWNwZxI6T5e0hbBagw6GG2N4u2n1vCpnSyVPZQV64cm3hgMQFuNPHv3e69+ABGq2viHRzrBDAaTw==", + "dependencies": { + "@libp2p/crypto": "^3.0.1", + "@libp2p/interface": "^1.0.1", + "@libp2p/interface-internal": "^1.0.1", + "@libp2p/logger": "^4.0.1", + "@libp2p/multistream-select": "^5.0.0", + "@libp2p/peer-collections": "^5.0.0", + "@libp2p/peer-id": "^4.0.1", + "@libp2p/peer-id-factory": "^4.0.0", + "@libp2p/peer-store": "^10.0.0", + "@libp2p/utils": "^5.0.2", + "@multiformats/mafmt": "^12.1.6", + "@multiformats/multiaddr": "^12.1.10", + "@multiformats/multiaddr-matcher": "^1.1.0", + "any-signal": "^4.1.1", + "datastore-core": "^9.0.1", + "delay": "^6.0.0", + "interface-datastore": "^8.2.0", + "it-all": "^3.0.2", + "it-drain": "^3.0.2", + "it-filter": "^3.0.1", + "it-first": "^3.0.3", + "it-map": "^3.0.4", + "it-merge": "^3.0.0", + "it-pipe": "^3.0.1", + "it-stream-types": "^2.0.1", + "merge-options": "^3.0.4", + "multiformats": "^12.1.3", + "p-defer": "^4.0.0", + "p-queue": "^7.4.1", + "private-ip": "^3.0.1", + "rate-limiter-flexible": "^3.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/merge-options": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", + "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", + "dependencies": { + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mortice": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mortice/-/mortice-3.0.1.tgz", + "integrity": "sha512-eyDUsl1nCR9+JtNksKnaESLP9MgAXCA4w1LTtsmOSQNsThnv++f36rrBu5fC/fdGIwTJZmbiaR/QewptH93pYA==", + "dependencies": { + "nanoid": "^4.0.0", + "observable-webworkers": "^2.0.1", + "p-queue": "^7.2.0", + "p-timeout": "^6.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/mortice/node_modules/nanoid": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.2.tgz", + "integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^14 || ^16 || >=18" + } + }, + "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/multiformats": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", + "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/nanoid": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.4.tgz", + "integrity": "sha512-vAjmBf13gsmhXSgBrtIclinISzFFy22WwCYoyilZlsrRXNIHSwgFQ1bEdjRwMT3aoadeIF6HMuDRlOxzfXV8ig==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/observable-webworkers": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/observable-webworkers/-/observable-webworkers-2.0.1.tgz", + "integrity": "sha512-JI1vB0u3pZjoQKOK1ROWzp0ygxSi7Yb0iR+7UNsw4/Zn4cQ0P3R7XL38zac/Dy2tEA7Lg88/wIJTjF8vYXZ0uw==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/p-defer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", + "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-7.4.1.tgz", + "integrity": "sha512-vRpMXmIkYF2/1hLBKisKeVYJZ8S2tZ0zEAmIJgdVKP2nq0nh4qCdf8bgw+ZgKrkh71AOCaqzwbJJk1WtdcF3VA==", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^5.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue/node_modules/p-timeout": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.2.tgz", + "integrity": "sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/private-ip": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/private-ip/-/private-ip-3.0.1.tgz", + "integrity": "sha512-Ezc16ANuhSHmWAE6lbXUKburNzGpR0J5X0Zh5Um/PZ/s57Fp+HYqYe6BYPH2QbqKr/5WebfzJQ1jq6Kj5dbRmA==", + "dependencies": { + "@chainsafe/is-ip": "^2.0.1", + "ip-regex": "^5.0.0", + "ipaddr.js": "^2.1.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/protons-runtime": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-5.2.0.tgz", + "integrity": "sha512-jL3VSbXllgm17zurKQ/z+Ath0w+4BknJ+l/NLocfjAB8hbeASOZTNtb7zK3nDsKq2pHK9YFumNQvpkZ6gFfWhA==", + "dependencies": { + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/race-signal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/race-signal/-/race-signal-1.0.2.tgz", + "integrity": "sha512-o3xNv0iTcIDQCXFlF6fPAMEBRjFxssgGoRqLbg06m+AdzEXXLUmoNOoUHTVz2NoBI8hHwKFKoC6IqyNtWr2bww==" + }, + "node_modules/rate-limiter-flexible": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/rate-limiter-flexible/-/rate-limiter-flexible-3.0.4.tgz", + "integrity": "sha512-LFrdT9Pl/TRxG143frHBPyESXHvS2tstLfAUM6shBbJ3M6YssT2cIUWFwAWVAU9Vl4Z2gUN7ZE7tSdQh/0aqcA==" + }, + "node_modules/receptacle": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/receptacle/-/receptacle-1.3.2.tgz", + "integrity": "sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/stream-to-it": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/stream-to-it/-/stream-to-it-0.2.4.tgz", + "integrity": "sha512-4vEbkSs83OahpmBybNJXlJd7d6/RxzkkSdT3I0mnGt79Xd2Kk+e1JqbvAvsQfCeKj3aKb0QIWkyK3/n0j506vQ==", + "dependencies": { + "get-iterator": "^1.0.2" + } + }, + "node_modules/stream-to-it/node_modules/get-iterator": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-1.0.2.tgz", + "integrity": "sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg==" + }, + "node_modules/uint8-varint": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/uint8-varint/-/uint8-varint-2.0.2.tgz", + "integrity": "sha512-LZXmBT0jiHR7J4oKM1GUhtdLFW1yPauzI8NjJlotXn92TprO9u8VMvEVR4QMk8xhUVUd+2fqfU2/kGbVHYSSWw==", + "dependencies": { + "uint8arraylist": "^2.0.0", + "uint8arrays": "^4.0.2" + } + }, + "node_modules/uint8arraylist": { + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.7.tgz", + "integrity": "sha512-ohRElqR6C5dd60vRFLq40MCiSnUe1AzkpHvbCEMCGGP6zMoFYECsjdhL6bR1kTK37ONNRDuHQ3RIpScRYcYYIg==", + "dependencies": { + "uint8arrays": "^4.0.2" + } + }, + "node_modules/uint8arrays": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.9.tgz", + "integrity": "sha512-iHU8XJJnfeijILZWzV7RgILdPHqe0mjJvyzY4mO8aUUtHsDbPa2Gc8/02Kc4zeokp2W6Qq8z9Ap1xkQ1HfbKwg==", + "dependencies": { + "multiformats": "^12.0.1" + } + }, + "node_modules/wherearewe": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wherearewe/-/wherearewe-2.0.1.tgz", + "integrity": "sha512-XUguZbDxCA2wBn2LoFtcEhXL6AXo+hVjGonwhSTTTU9SzbWG8Xu3onNIpzf9j/mYUcJQ0f+m37SzG77G851uFw==", + "dependencies": { + "is-electron": "^2.2.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "noise": { + "version": "14.0.0", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/as-chacha20poly1305": "^0.1.0", + "@chainsafe/as-sha256": "^0.4.1", + "@libp2p/crypto": "^3.0.0", + "@libp2p/interface": "^1.0.0", + "@libp2p/peer-id": "^4.0.0", + "@noble/ciphers": "^0.4.0", + "@noble/curves": "^1.1.0", + "@noble/hashes": "^1.3.1", + "it-byte-stream": "^1.0.0", + "it-length-prefixed": "^9.0.1", + "it-length-prefixed-stream": "^1.0.0", + "it-pair": "^2.0.6", + "it-pipe": "^3.0.1", + "it-stream-types": "^2.0.1", + "protons-runtime": "^5.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.4", + "wherearewe": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + } + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/package.json b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/package.json new file mode 100644 index 000000000..b4e28e217 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/package.json @@ -0,0 +1,13 @@ +{ + "name": "@libp2p/perf-js-libp2p-1-0", + "private": true, + "main": "index.js", + "type": "module", + "dependencies": { + "@chainsafe/libp2p-noise": "file:./noise", + "@chainsafe/libp2p-yamux": "^6.0.1", + "@libp2p/perf": "^3.0.4", + "@libp2p/tcp": "^9.0.4", + "libp2p": "^1.0.5" + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc-smart/perf b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/perf new file mode 100755 index 000000000..1a3e19c51 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc-smart/perf @@ -0,0 +1,45 @@ +#!/bin/bash + +# In case this script is `kill`ed, `kill` its child process, namely the `node` +# process below. +cleanup() { + kill $node_pid +} +trap cleanup EXIT TERM + +# Find the path to the Node.js executable +node_path=$(which node) + +run_server=false +server_address="" +upload_bytes=0 +download_bytes=0 +transport="" + +# Parse named parameters manually +for ((i = 1; i <= $#; i++)); do + if [ "${!i}" == "--server-address" ]; then + server_address="${@:i+1:1}" + fi + if [ "${!i}" == "--upload-bytes" ]; then + upload_bytes="${@:i+1:1}" + fi + if [ "${!i}" == "--download-bytes" ]; then + download_bytes="${@:i+1:1}" + fi + if [ "${!i}" == "--transport" ]; then + transport="${@:i+1:1}" + fi + if [ "${!i}" == "--run-server" ]; then + run_server=true + fi +done + +# Run perf +node $(dirname "$0")/index.js --run-server=$run_server --server-address=$server_address --upload-bytes=$upload_bytes --download-bytes=$download_bytes --transport=$transport & + +node_pid=$! + +# Wait for `node_pid` to finish, or for it to be `kill`ed by the above +# `cleanup`. +wait $node_pid diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/Makefile b/perf/impl/js-libp2p/v1.0-noise-alloc/Makefile new file mode 100644 index 000000000..a1e077cdc --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/Makefile @@ -0,0 +1,12 @@ +DOCKER_IMAGE := node:20-alpine +DOCKER_RUN := docker run --rm -v "$(shell pwd)":/usr/src/myapp -w /usr/src/myapp $(DOCKER_IMAGE) + +all: perf + +perf: + $(DOCKER_RUN) npm ci + +clean: + rm -rf node_modules + +.PHONY: all clean perf diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/index.js b/perf/impl/js-libp2p/v1.0-noise-alloc/index.js new file mode 100644 index 000000000..0b432a9c5 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/index.js @@ -0,0 +1,112 @@ +import { noise } from '@chainsafe/libp2p-noise' +import { yamux } from '@chainsafe/libp2p-yamux' +import { tcp } from '@libp2p/tcp' +import { multiaddr } from '@multiformats/multiaddr' +import { createLibp2p } from 'libp2p' +import { perf } from '@libp2p/perf' +import { parseArgs } from 'node:util' + +const argv = parseArgs({ + options: { + 'run-server': { + type: 'string', + default: 'false' + }, + 'server-address': { + type: 'string' + }, + transport: { + type: 'string', + default: 'tcp' + }, + 'upload-bytes': { + type: 'string', + default: '0' + }, + 'download-bytes': { + type: 'string', + default: '0' + } + } +}) + +/** + * @param {boolean} runServer + * @param {string} serverIpAddress + * @param {string} transport + * @param {number} uploadBytes + * @param {number} downloadBytes + */ +export async function main (runServer, serverIpAddress, transport, uploadBytes, downloadBytes) { + const { host, port } = splitHostPort(serverIpAddress) + + const config = { + //peerId, + transports: [tcp({ + socket: { + noDelay: true + }, + server: { + noDelay: true + } + })], + streamMuxers: [yamux()], + connectionEncryption: [ + noise() + ], + connectionManager: { + minConnections: 0 + }, + services: { + perf: perf() + } + } + + if (runServer) { + Object.assign(config, { + addresses: { + listen: [ + // #TODO: right now we only support tcp + `/ip4/${host}/tcp/${port}` + ] + } + }) + } + + const node = await createLibp2p(config) + + await node.start() + + if (!runServer) { + for await (const output of node.services.perf.measurePerformance(multiaddr(`/ip4/${host}/tcp/${port}`), uploadBytes, downloadBytes)) { + // eslint-disable-next-line no-console + console.log(JSON.stringify(output)) + } + + await node.stop() + } +} + +/** + * @param {string} address + * @returns { host: string, port?: string } + */ +function splitHostPort (address) { + try { + const parts = address.split(':') + const host = parts[0] + const port = parts[1] + return { + host, + port + } + } catch (error) { + throw Error('Invalid server address') + } +} + +main(argv.values['run-server'] === 'true', argv.values['server-address'], argv.values.transport, Number(argv.values['upload-bytes']), Number(argv.values['download-bytes'])).catch((err) => { + // eslint-disable-next-line no-console + console.error(err) + process.exit(1) +}) diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/index.min.js b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/index.min.js new file mode 100644 index 000000000..5841ece31 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/index.min.js @@ -0,0 +1,51 @@ +(function (root, factory) {(typeof module === 'object' && module.exports) ? module.exports = factory() : root.ChainsafeLibp2PNoise = factory()}(typeof self !== 'undefined' ? self : this, function () { +"use strict";var ChainsafeLibp2PNoise=(()=>{var su=Object.create;var Nn=Object.defineProperty;var ou=Object.getOwnPropertyDescriptor;var au=Object.getOwnPropertyNames;var cu=Object.getPrototypeOf,fu=Object.prototype.hasOwnProperty;var pt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Lt=(e,t)=>{for(var r in t)Nn(e,r,{get:t[r],enumerable:!0})},ia=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of au(t))!fu.call(e,i)&&i!==r&&Nn(e,i,{get:()=>t[i],enumerable:!(n=ou(t,i))||n.enumerable});return e};var Gt=(e,t,r)=>(r=e!=null?su(cu(e)):{},ia(t||!e||!e.__esModule?Nn(r,"default",{value:e,enumerable:!0}):r,e)),uu=e=>ia(Nn({},"__esModule",{value:!0}),e);var ua=pt((k1,fa)=>{"use strict";function ca(e,t){for(let r in t)Object.defineProperty(e,r,{value:t[r],enumerable:!0,configurable:!0});return e}function mu(e,t,r){if(!e||typeof e=="string")throw new TypeError("Please pass an Error to err-code");r||(r={}),typeof t=="object"&&(r=t,t=""),t&&(r.code=t);try{return ca(e,r)}catch{r.message=e.message,r.stack=e.stack;let i=function(){};return i.prototype=Object.create(Object.getPrototypeOf(e)),ca(new i,r)}}fa.exports=mu});var ht=pt((Fg,u0)=>{u0.exports={options:{usePureJavaScript:!1}}});var p0=pt((Hg,l0)=>{var Cs={};l0.exports=Cs;var h0={};Cs.encode=function(e,t,r){if(typeof t!="string")throw new TypeError('"alphabet" must be a string.');if(r!==void 0&&typeof r!="number")throw new TypeError('"maxline" must be a number.');var n="";if(!(e instanceof Uint8Array))n=Yh(e,t);else{var i=0,s=t.length,o=t.charAt(0),a=[0];for(i=0;i0;)a.push(f%s),f=f/s|0}for(i=0;e[i]===0&&i=0;--i)n+=t[a[i]]}if(r){var u=new RegExp(".{1,"+r+"}","g");n=n.match(u).join(`\r +`)}return n};Cs.decode=function(e,t){if(typeof e!="string")throw new TypeError('"input" must be a string.');if(typeof t!="string")throw new TypeError('"alphabet" must be a string.');var r=h0[t];if(!r){r=h0[t]=[];for(var n=0;n>=8;for(;f>0;)o.push(f&255),f>>=8}for(var u=0;e[u]===s&&u0;)s.push(a%n),a=a/n|0}var c="";for(r=0;e.at(r)===0&&r=0;--r)c+=t[s[r]];return c}});var Ct=pt((qg,g0)=>{var d0=ht(),y0=p0(),b=g0.exports=d0.util=d0.util||{};(function(){if(typeof process<"u"&&process.nextTick&&!process.browser){b.nextTick=process.nextTick,typeof setImmediate=="function"?b.setImmediate=setImmediate:b.setImmediate=b.nextTick;return}if(typeof setImmediate=="function"){b.setImmediate=function(){return setImmediate.apply(void 0,arguments)},b.nextTick=function(a){return setImmediate(a)};return}if(b.setImmediate=function(a){setTimeout(a,0)},typeof window<"u"&&typeof window.postMessage=="function"){let a=function(c){if(c.source===window&&c.data===e){c.stopPropagation();var f=t.slice();t.length=0,f.forEach(function(u){u()})}};var o=a,e="forge.setImmediate",t=[];b.setImmediate=function(c){t.push(c),t.length===1&&window.postMessage(e,"*")},window.addEventListener("message",a,!0)}if(typeof MutationObserver<"u"){var r=Date.now(),n=!0,i=document.createElement("div"),t=[];new MutationObserver(function(){var c=t.slice();t.length=0,c.forEach(function(f){f()})}).observe(i,{attributes:!0});var s=b.setImmediate;b.setImmediate=function(c){Date.now()-r>15?(r=Date.now(),s(c)):(t.push(c),t.length===1&&i.setAttribute("a",n=!n))}}b.nextTick=b.setImmediate})();b.isNodejs=typeof process<"u"&&process.versions&&process.versions.node;b.globalScope=function(){return b.isNodejs?globalThis:typeof self>"u"?window:self}();b.isArray=Array.isArray||function(e){return Object.prototype.toString.call(e)==="[object Array]"};b.isArrayBuffer=function(e){return typeof ArrayBuffer<"u"&&e instanceof ArrayBuffer};b.isArrayBufferView=function(e){return e&&b.isArrayBuffer(e.buffer)&&e.byteLength!==void 0};function fn(e){if(!(e===8||e===16||e===24||e===32))throw new Error("Only 8, 16, 24, or 32 bits supported: "+e)}b.ByteBuffer=Is;function Is(e){if(this.data="",this.read=0,typeof e=="string")this.data=e;else if(b.isArrayBuffer(e)||b.isArrayBufferView(e))if(typeof Buffer<"u"&&e instanceof Buffer)this.data=e.toString("binary");else{var t=new Uint8Array(e);try{this.data=String.fromCharCode.apply(null,t)}catch{for(var r=0;rWh&&(this.data.substr(0,1),this._constructedStringLength=0)};b.ByteStringBuffer.prototype.length=function(){return this.data.length-this.read};b.ByteStringBuffer.prototype.isEmpty=function(){return this.length()<=0};b.ByteStringBuffer.prototype.putByte=function(e){return this.putBytes(String.fromCharCode(e))};b.ByteStringBuffer.prototype.fillWithByte=function(e,t){e=String.fromCharCode(e);for(var r=this.data;t>0;)t&1&&(r+=e),t>>>=1,t>0&&(e+=e);return this.data=r,this._optimizeConstructedString(t),this};b.ByteStringBuffer.prototype.putBytes=function(e){return this.data+=e,this._optimizeConstructedString(e.length),this};b.ByteStringBuffer.prototype.putString=function(e){return this.putBytes(b.encodeUtf8(e))};b.ByteStringBuffer.prototype.putInt16=function(e){return this.putBytes(String.fromCharCode(e>>8&255)+String.fromCharCode(e&255))};b.ByteStringBuffer.prototype.putInt24=function(e){return this.putBytes(String.fromCharCode(e>>16&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(e&255))};b.ByteStringBuffer.prototype.putInt32=function(e){return this.putBytes(String.fromCharCode(e>>24&255)+String.fromCharCode(e>>16&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(e&255))};b.ByteStringBuffer.prototype.putInt16Le=function(e){return this.putBytes(String.fromCharCode(e&255)+String.fromCharCode(e>>8&255))};b.ByteStringBuffer.prototype.putInt24Le=function(e){return this.putBytes(String.fromCharCode(e&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(e>>16&255))};b.ByteStringBuffer.prototype.putInt32Le=function(e){return this.putBytes(String.fromCharCode(e&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(e>>16&255)+String.fromCharCode(e>>24&255))};b.ByteStringBuffer.prototype.putInt=function(e,t){fn(t);var r="";do t-=8,r+=String.fromCharCode(e>>t&255);while(t>0);return this.putBytes(r)};b.ByteStringBuffer.prototype.putSignedInt=function(e,t){return e<0&&(e+=2<0);return t};b.ByteStringBuffer.prototype.getSignedInt=function(e){var t=this.getInt(e),r=2<=r&&(t-=r<<1),t};b.ByteStringBuffer.prototype.getBytes=function(e){var t;return e?(e=Math.min(this.length(),e),t=this.data.slice(this.read,this.read+e),this.read+=e):e===0?t="":(t=this.read===0?this.data:this.data.slice(this.read),this.clear()),t};b.ByteStringBuffer.prototype.bytes=function(e){return typeof e>"u"?this.data.slice(this.read):this.data.slice(this.read,this.read+e)};b.ByteStringBuffer.prototype.at=function(e){return this.data.charCodeAt(this.read+e)};b.ByteStringBuffer.prototype.setAt=function(e,t){return this.data=this.data.substr(0,this.read+e)+String.fromCharCode(t)+this.data.substr(this.read+e+1),this};b.ByteStringBuffer.prototype.last=function(){return this.data.charCodeAt(this.data.length-1)};b.ByteStringBuffer.prototype.copy=function(){var e=b.createBuffer(this.data);return e.read=this.read,e};b.ByteStringBuffer.prototype.compact=function(){return this.read>0&&(this.data=this.data.slice(this.read),this.read=0),this};b.ByteStringBuffer.prototype.clear=function(){return this.data="",this.read=0,this};b.ByteStringBuffer.prototype.truncate=function(e){var t=Math.max(0,this.length()-e);return this.data=this.data.substr(this.read,t),this.read=0,this};b.ByteStringBuffer.prototype.toHex=function(){for(var e="",t=this.read;t=e)return this;t=Math.max(t||this.growSize,e);var r=new Uint8Array(this.data.buffer,this.data.byteOffset,this.data.byteLength),n=new Uint8Array(this.length()+t);return n.set(r),this.data=new DataView(n.buffer),this};b.DataBuffer.prototype.putByte=function(e){return this.accommodate(1),this.data.setUint8(this.write++,e),this};b.DataBuffer.prototype.fillWithByte=function(e,t){this.accommodate(t);for(var r=0;r>8&65535),this.data.setInt8(this.write,e>>16&255),this.write+=3,this};b.DataBuffer.prototype.putInt32=function(e){return this.accommodate(4),this.data.setInt32(this.write,e),this.write+=4,this};b.DataBuffer.prototype.putInt16Le=function(e){return this.accommodate(2),this.data.setInt16(this.write,e,!0),this.write+=2,this};b.DataBuffer.prototype.putInt24Le=function(e){return this.accommodate(3),this.data.setInt8(this.write,e>>16&255),this.data.setInt16(this.write,e>>8&65535,!0),this.write+=3,this};b.DataBuffer.prototype.putInt32Le=function(e){return this.accommodate(4),this.data.setInt32(this.write,e,!0),this.write+=4,this};b.DataBuffer.prototype.putInt=function(e,t){fn(t),this.accommodate(t/8);do t-=8,this.data.setInt8(this.write++,e>>t&255);while(t>0);return this};b.DataBuffer.prototype.putSignedInt=function(e,t){return fn(t),this.accommodate(t/8),e<0&&(e+=2<0);return t};b.DataBuffer.prototype.getSignedInt=function(e){var t=this.getInt(e),r=2<=r&&(t-=r<<1),t};b.DataBuffer.prototype.getBytes=function(e){var t;return e?(e=Math.min(this.length(),e),t=this.data.slice(this.read,this.read+e),this.read+=e):e===0?t="":(t=this.read===0?this.data:this.data.slice(this.read),this.clear()),t};b.DataBuffer.prototype.bytes=function(e){return typeof e>"u"?this.data.slice(this.read):this.data.slice(this.read,this.read+e)};b.DataBuffer.prototype.at=function(e){return this.data.getUint8(this.read+e)};b.DataBuffer.prototype.setAt=function(e,t){return this.data.setUint8(e,t),this};b.DataBuffer.prototype.last=function(){return this.data.getUint8(this.write-1)};b.DataBuffer.prototype.copy=function(){return new b.DataBuffer(this)};b.DataBuffer.prototype.compact=function(){if(this.read>0){var e=new Uint8Array(this.data.buffer,this.read),t=new Uint8Array(e.byteLength);t.set(e),this.data=new DataView(t),this.write-=this.read,this.read=0}return this};b.DataBuffer.prototype.clear=function(){return this.data=new DataView(new ArrayBuffer(0)),this.read=this.write=0,this};b.DataBuffer.prototype.truncate=function(e){return this.write=Math.max(0,this.length()-e),this.read=Math.min(this.read,this.write),this};b.DataBuffer.prototype.toHex=function(){for(var e="",t=this.read;t0;)t&1&&(r+=e),t>>>=1,t>0&&(e+=e);return r};b.xorBytes=function(e,t,r){for(var n="",i="",s="",o=0,a=0;r>0;--r,++o)i=e.charCodeAt(o)^t.charCodeAt(o),a>=10&&(n+=s,s="",a=0),s+=String.fromCharCode(i),++a;return n+=s,n};b.hexToBytes=function(e){var t="",r=0;for(e.length&!0&&(r=1,t+=String.fromCharCode(parseInt(e[0],16)));r>24&255)+String.fromCharCode(e>>16&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(e&255)};var qe="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",ze=[62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,64,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],x0="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";b.encode64=function(e,t){for(var r="",n="",i,s,o,a=0;a>2),r+=qe.charAt((i&3)<<4|s>>4),isNaN(s)?r+="==":(r+=qe.charAt((s&15)<<2|o>>6),r+=isNaN(o)?"=":qe.charAt(o&63)),t&&r.length>t&&(n+=r.substr(0,t)+`\r +`,r=r.substr(t));return n+=r,n};b.decode64=function(e){e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(var t="",r,n,i,s,o=0;o>4),i!==64&&(t+=String.fromCharCode((n&15)<<4|i>>2),s!==64&&(t+=String.fromCharCode((i&3)<<6|s)));return t};b.encodeUtf8=function(e){return unescape(encodeURIComponent(e))};b.decodeUtf8=function(e){return decodeURIComponent(escape(e))};b.binary={raw:{},hex:{},base64:{},base58:{},baseN:{encode:y0.encode,decode:y0.decode}};b.binary.raw.encode=function(e){return String.fromCharCode.apply(null,e)};b.binary.raw.decode=function(e,t,r){var n=t;n||(n=new Uint8Array(e.length)),r=r||0;for(var i=r,s=0;s>2),r+=qe.charAt((i&3)<<4|s>>4),isNaN(s)?r+="==":(r+=qe.charAt((s&15)<<2|o>>6),r+=isNaN(o)?"=":qe.charAt(o&63)),t&&r.length>t&&(n+=r.substr(0,t)+`\r +`,r=r.substr(t));return n+=r,n};b.binary.base64.decode=function(e,t,r){var n=t;n||(n=new Uint8Array(Math.ceil(e.length/4)*3)),e=e.replace(/[^A-Za-z0-9\+\/\=]/g,""),r=r||0;for(var i,s,o,a,c=0,f=r;c>4,o!==64&&(n[f++]=(s&15)<<4|o>>2,a!==64&&(n[f++]=(o&3)<<6|a));return t?f-r:n.subarray(0,f)};b.binary.base58.encode=function(e,t){return b.binary.baseN.encode(e,x0,t)};b.binary.base58.decode=function(e,t){return b.binary.baseN.decode(e,x0,t)};b.text={utf8:{},utf16:{}};b.text.utf8.encode=function(e,t,r){e=b.encodeUtf8(e);var n=t;n||(n=new Uint8Array(e.length)),r=r||0;for(var i=r,s=0;s"u"&&(r=["web","flash"]);var i,s=!1,o=null;for(var a in r){i=r[a];try{if(i==="flash"||i==="both"){if(t[0]===null)throw new Error("Flash local storage not available.");n=e.apply(this,t),s=i==="flash"}(i==="web"||i==="both")&&(t[0]=localStorage,n=e.apply(this,t),s=!0)}catch(c){o=c}if(s)break}if(!s)throw o;return n};b.setItem=function(e,t,r,n,i){ai(Zh,arguments,i)};b.getItem=function(e,t,r,n){return ai(Xh,arguments,n)};b.removeItem=function(e,t,r,n){ai(Qh,arguments,n)};b.clearItems=function(e,t,r){ai(Jh,arguments,r)};b.isEmpty=function(e){for(var t in e)if(e.hasOwnProperty(t))return!1;return!0};b.format=function(e){for(var t=/%./g,r,n,i=0,s=[],o=0;r=t.exec(e);){n=e.substring(o,t.lastIndex-2),n.length>0&&s.push(n),o=t.lastIndex;var a=r[0][1];switch(a){case"s":case"o":i");break;case"%":s.push("%");break;default:s.push("<%"+a+"?>")}}return s.push(e.substring(o)),s.join("")};b.formatNumber=function(e,t,r,n){var i=e,s=isNaN(t=Math.abs(t))?2:t,o=r===void 0?",":r,a=n===void 0?".":n,c=i<0?"-":"",f=parseInt(i=Math.abs(+i||0).toFixed(s),10)+"",u=f.length>3?f.length%3:0;return c+(u?f.substr(0,u)+a:"")+f.substr(u).replace(/(\d{3})(?=\d)/g,"$1"+a)+(s?o+Math.abs(i-f).toFixed(s).slice(2):"")};b.formatSize=function(e){return e>=1073741824?e=b.formatNumber(e/1073741824,2,".","")+" GiB":e>=1048576?e=b.formatNumber(e/1048576,2,".","")+" MiB":e>=1024?e=b.formatNumber(e/1024,0)+" KiB":e=b.formatNumber(e,0)+" bytes",e};b.bytesFromIP=function(e){return e.indexOf(".")!==-1?b.bytesFromIPv4(e):e.indexOf(":")!==-1?b.bytesFromIPv6(e):null};b.bytesFromIPv4=function(e){if(e=e.split("."),e.length!==4)return null;for(var t=b.createBuffer(),r=0;rr[n].end-r[n].start&&(n=r.length-1))}t.push(s)}if(r.length>0){var c=r[n];c.end-c.start>0&&(t.splice(c.start,c.end-c.start+1,""),c.start===0&&t.unshift(""),c.end===7&&t.push(""))}return t.join(":")};b.estimateCores=function(e,t){if(typeof e=="function"&&(t=e,e={}),e=e||{},"cores"in b&&!e.update)return t(null,b.cores);if(typeof navigator<"u"&&"hardwareConcurrency"in navigator&&navigator.hardwareConcurrency>0)return b.cores=navigator.hardwareConcurrency,t(null,b.cores);if(typeof Worker>"u")return b.cores=1,t(null,b.cores);if(typeof Blob>"u")return b.cores=2,t(null,b.cores);var r=URL.createObjectURL(new Blob(["(",function(){self.addEventListener("message",function(o){for(var a=Date.now(),c=a+4;Date.now()x.st&&u.stu.st&&x.st{var un=ht();un.pki=un.pki||{};var Ls=m0.exports=un.pki.oids=un.oids=un.oids||{};function P(e,t){Ls[e]=t,Ls[t]=e}function ft(e,t){Ls[e]=t}P("1.2.840.113549.1.1.1","rsaEncryption");P("1.2.840.113549.1.1.4","md5WithRSAEncryption");P("1.2.840.113549.1.1.5","sha1WithRSAEncryption");P("1.2.840.113549.1.1.7","RSAES-OAEP");P("1.2.840.113549.1.1.8","mgf1");P("1.2.840.113549.1.1.9","pSpecified");P("1.2.840.113549.1.1.10","RSASSA-PSS");P("1.2.840.113549.1.1.11","sha256WithRSAEncryption");P("1.2.840.113549.1.1.12","sha384WithRSAEncryption");P("1.2.840.113549.1.1.13","sha512WithRSAEncryption");P("1.3.101.112","EdDSA25519");P("1.2.840.10040.4.3","dsa-with-sha1");P("1.3.14.3.2.7","desCBC");P("1.3.14.3.2.26","sha1");P("1.3.14.3.2.29","sha1WithRSASignature");P("2.16.840.1.101.3.4.2.1","sha256");P("2.16.840.1.101.3.4.2.2","sha384");P("2.16.840.1.101.3.4.2.3","sha512");P("2.16.840.1.101.3.4.2.4","sha224");P("2.16.840.1.101.3.4.2.5","sha512-224");P("2.16.840.1.101.3.4.2.6","sha512-256");P("1.2.840.113549.2.2","md2");P("1.2.840.113549.2.5","md5");P("1.2.840.113549.1.7.1","data");P("1.2.840.113549.1.7.2","signedData");P("1.2.840.113549.1.7.3","envelopedData");P("1.2.840.113549.1.7.4","signedAndEnvelopedData");P("1.2.840.113549.1.7.5","digestedData");P("1.2.840.113549.1.7.6","encryptedData");P("1.2.840.113549.1.9.1","emailAddress");P("1.2.840.113549.1.9.2","unstructuredName");P("1.2.840.113549.1.9.3","contentType");P("1.2.840.113549.1.9.4","messageDigest");P("1.2.840.113549.1.9.5","signingTime");P("1.2.840.113549.1.9.6","counterSignature");P("1.2.840.113549.1.9.7","challengePassword");P("1.2.840.113549.1.9.8","unstructuredAddress");P("1.2.840.113549.1.9.14","extensionRequest");P("1.2.840.113549.1.9.20","friendlyName");P("1.2.840.113549.1.9.21","localKeyId");P("1.2.840.113549.1.9.22.1","x509Certificate");P("1.2.840.113549.1.12.10.1.1","keyBag");P("1.2.840.113549.1.12.10.1.2","pkcs8ShroudedKeyBag");P("1.2.840.113549.1.12.10.1.3","certBag");P("1.2.840.113549.1.12.10.1.4","crlBag");P("1.2.840.113549.1.12.10.1.5","secretBag");P("1.2.840.113549.1.12.10.1.6","safeContentsBag");P("1.2.840.113549.1.5.13","pkcs5PBES2");P("1.2.840.113549.1.5.12","pkcs5PBKDF2");P("1.2.840.113549.1.12.1.1","pbeWithSHAAnd128BitRC4");P("1.2.840.113549.1.12.1.2","pbeWithSHAAnd40BitRC4");P("1.2.840.113549.1.12.1.3","pbeWithSHAAnd3-KeyTripleDES-CBC");P("1.2.840.113549.1.12.1.4","pbeWithSHAAnd2-KeyTripleDES-CBC");P("1.2.840.113549.1.12.1.5","pbeWithSHAAnd128BitRC2-CBC");P("1.2.840.113549.1.12.1.6","pbewithSHAAnd40BitRC2-CBC");P("1.2.840.113549.2.7","hmacWithSHA1");P("1.2.840.113549.2.8","hmacWithSHA224");P("1.2.840.113549.2.9","hmacWithSHA256");P("1.2.840.113549.2.10","hmacWithSHA384");P("1.2.840.113549.2.11","hmacWithSHA512");P("1.2.840.113549.3.7","des-EDE3-CBC");P("2.16.840.1.101.3.4.1.2","aes128-CBC");P("2.16.840.1.101.3.4.1.22","aes192-CBC");P("2.16.840.1.101.3.4.1.42","aes256-CBC");P("2.5.4.3","commonName");P("2.5.4.4","surname");P("2.5.4.5","serialNumber");P("2.5.4.6","countryName");P("2.5.4.7","localityName");P("2.5.4.8","stateOrProvinceName");P("2.5.4.9","streetAddress");P("2.5.4.10","organizationName");P("2.5.4.11","organizationalUnitName");P("2.5.4.12","title");P("2.5.4.13","description");P("2.5.4.15","businessCategory");P("2.5.4.17","postalCode");P("2.5.4.42","givenName");P("1.3.6.1.4.1.311.60.2.1.2","jurisdictionOfIncorporationStateOrProvinceName");P("1.3.6.1.4.1.311.60.2.1.3","jurisdictionOfIncorporationCountryName");P("2.16.840.1.113730.1.1","nsCertType");P("2.16.840.1.113730.1.13","nsComment");ft("2.5.29.1","authorityKeyIdentifier");ft("2.5.29.2","keyAttributes");ft("2.5.29.3","certificatePolicies");ft("2.5.29.4","keyUsageRestriction");ft("2.5.29.5","policyMapping");ft("2.5.29.6","subtreesConstraint");ft("2.5.29.7","subjectAltName");ft("2.5.29.8","issuerAltName");ft("2.5.29.9","subjectDirectoryAttributes");ft("2.5.29.10","basicConstraints");ft("2.5.29.11","nameConstraints");ft("2.5.29.12","policyConstraints");ft("2.5.29.13","basicConstraints");P("2.5.29.14","subjectKeyIdentifier");P("2.5.29.15","keyUsage");ft("2.5.29.16","privateKeyUsagePeriod");P("2.5.29.17","subjectAltName");P("2.5.29.18","issuerAltName");P("2.5.29.19","basicConstraints");ft("2.5.29.20","cRLNumber");ft("2.5.29.21","cRLReason");ft("2.5.29.22","expirationDate");ft("2.5.29.23","instructionCode");ft("2.5.29.24","invalidityDate");ft("2.5.29.25","cRLDistributionPoints");ft("2.5.29.26","issuingDistributionPoint");ft("2.5.29.27","deltaCRLIndicator");ft("2.5.29.28","issuingDistributionPoint");ft("2.5.29.29","certificateIssuer");ft("2.5.29.30","nameConstraints");P("2.5.29.31","cRLDistributionPoints");P("2.5.29.32","certificatePolicies");ft("2.5.29.33","policyMappings");ft("2.5.29.34","policyConstraints");P("2.5.29.35","authorityKeyIdentifier");ft("2.5.29.36","policyConstraints");P("2.5.29.37","extKeyUsage");ft("2.5.29.46","freshestCRL");ft("2.5.29.54","inhibitAnyPolicy");P("1.3.6.1.4.1.11129.2.4.2","timestampList");P("1.3.6.1.5.5.7.1.1","authorityInfoAccess");P("1.3.6.1.5.5.7.3.1","serverAuth");P("1.3.6.1.5.5.7.3.2","clientAuth");P("1.3.6.1.5.5.7.3.3","codeSigning");P("1.3.6.1.5.5.7.3.4","emailProtection");P("1.3.6.1.5.5.7.3.8","timeStamping")});var ln=pt((Gg,v0)=>{var gt=ht();Ct();ci();var V=v0.exports=gt.asn1=gt.asn1||{};V.Class={UNIVERSAL:0,APPLICATION:64,CONTEXT_SPECIFIC:128,PRIVATE:192};V.Type={NONE:0,BOOLEAN:1,INTEGER:2,BITSTRING:3,OCTETSTRING:4,NULL:5,OID:6,ODESC:7,EXTERNAL:8,REAL:9,ENUMERATED:10,EMBEDDED:11,UTF8:12,ROID:13,SEQUENCE:16,SET:17,PRINTABLESTRING:19,IA5STRING:22,UTCTIME:23,GENERALIZEDTIME:24,BMPSTRING:30};V.create=function(e,t,r,n,i){if(gt.util.isArray(n)){for(var s=[],o=0;ot){var n=new Error("Too few bytes to parse DER.");throw n.available=e.length(),n.remaining=t,n.requested=r,n}}var jh=function(e,t){var r=e.getByte();if(t--,r!==128){var n,i=r&128;if(!i)n=r;else{var s=r&127;hn(e,t,s),n=e.getInt(s<<3)}if(n<0)throw new Error("Negative length: "+n);return n}};V.fromDer=function(e,t){t===void 0&&(t={strict:!0,parseAllBytes:!0,decodeBitStrings:!0}),typeof t=="boolean"&&(t={strict:t,parseAllBytes:!0,decodeBitStrings:!0}),"strict"in t||(t.strict=!0),"parseAllBytes"in t||(t.parseAllBytes=!0),"decodeBitStrings"in t||(t.decodeBitStrings=!0),typeof e=="string"&&(e=gt.util.createBuffer(e));var r=e.length(),n=fi(e,e.length(),0,t);if(t.parseAllBytes&&e.length()!==0){var i=new Error("Unparsed DER bytes remain after ASN.1 parsing.");throw i.byteCount=r,i.remaining=e.length(),i}return n};function fi(e,t,r,n){var i;hn(e,t,2);var s=e.getByte();t--;var o=s&192,a=s&31;i=e.length();var c=jh(e,t);if(t-=i-e.length(),c!==void 0&&c>t){if(n.strict){var f=new Error("Too few bytes to read ASN.1 value.");throw f.available=e.length(),f.remaining=t,f.requested=c,f}c=t}var u,h,l=(s&32)===32;if(l)if(u=[],c===void 0)for(;;){if(hn(e,t,2),e.bytes(2)==="\0\0"){e.getBytes(2),t-=2;break}i=e.length(),u.push(fi(e,t,r+1,n)),t-=i-e.length()}else for(;c>0;)i=e.length(),u.push(fi(e,c,r+1,n)),t-=i-e.length(),c-=i-e.length();if(u===void 0&&o===V.Class.UNIVERSAL&&a===V.Type.BITSTRING&&(h=e.bytes(c)),u===void 0&&n.decodeBitStrings&&o===V.Class.UNIVERSAL&&a===V.Type.BITSTRING&&c>1){var x=e.read,p=t,d=0;if(a===V.Type.BITSTRING&&(hn(e,t,1),d=e.getByte(),t--),d===0)try{i=e.length();var y={strict:!0,decodeBitStrings:!0},g=fi(e,t,r+1,y),v=i-e.length();t-=v,a==V.Type.BITSTRING&&v++;var m=g.tagClass;v===c&&(m===V.Class.UNIVERSAL||m===V.Class.CONTEXT_SPECIFIC)&&(u=[g])}catch{}u===void 0&&(e.read=x,t=p)}if(u===void 0){if(c===void 0){if(n.strict)throw new Error("Non-constructed ASN.1 object of indefinite length.");c=t}if(a===V.Type.BMPSTRING)for(u="";c>0;c-=2)hn(e,t,2),u+=String.fromCharCode(e.getInt16()),t-=2;else u=e.getBytes(c),t-=c}var C=h===void 0?null:{bitStringContents:h};return V.create(o,a,l,u,C)}V.toDer=function(e){var t=gt.util.createBuffer(),r=e.tagClass|e.type,n=gt.util.createBuffer(),i=!1;if("bitStringContents"in e&&(i=!0,e.original&&(i=V.equals(e,e.original))),i)n.putBytes(e.bitStringContents);else if(e.composed){e.constructed?r|=32:n.putByte(0);for(var s=0;s1&&(e.value.charCodeAt(0)===0&&!(e.value.charCodeAt(1)&128)||e.value.charCodeAt(0)===255&&(e.value.charCodeAt(1)&128)===128)?n.putBytes(e.value.substr(1)):n.putBytes(e.value);if(t.putByte(r),n.length()<=127)t.putByte(n.length()&127);else{var o=n.length(),a="";do a+=String.fromCharCode(o&255),o=o>>>8;while(o>0);t.putByte(a.length|128);for(var s=a.length-1;s>=0;--s)t.putByte(a.charCodeAt(s))}return t.putBuffer(n),t};V.oidToDer=function(e){var t=e.split("."),r=gt.util.createBuffer();r.putByte(40*parseInt(t[0],10)+parseInt(t[1],10));for(var n,i,s,o,a=2;a>>7,n||(o|=128),i.push(o),n=!1;while(s>0);for(var c=i.length-1;c>=0;--c)r.putByte(i[c])}return r};V.derToOid=function(e){var t;typeof e=="string"&&(e=gt.util.createBuffer(e));var r=e.getByte();t=Math.floor(r/40)+"."+r%40;for(var n=0;e.length()>0;)r=e.getByte(),n=n<<7,r&128?n+=r&127:(t+="."+(n+r),n=0);return t};V.utcTimeToDate=function(e){var t=new Date,r=parseInt(e.substr(0,2),10);r=r>=50?1900+r:2e3+r;var n=parseInt(e.substr(2,2),10)-1,i=parseInt(e.substr(4,2),10),s=parseInt(e.substr(6,2),10),o=parseInt(e.substr(8,2),10),a=0;if(e.length>11){var c=e.charAt(10),f=10;c!=="+"&&c!=="-"&&(a=parseInt(e.substr(10,2),10),f+=2)}if(t.setUTCFullYear(r,n,i),t.setUTCHours(s,o,a,0),f&&(c=e.charAt(f),c==="+"||c==="-")){var u=parseInt(e.substr(f+1,2),10),h=parseInt(e.substr(f+4,2),10),l=u*60+h;l*=6e4,c==="+"?t.setTime(+t-l):t.setTime(+t+l)}return t};V.generalizedTimeToDate=function(e){var t=new Date,r=parseInt(e.substr(0,4),10),n=parseInt(e.substr(4,2),10)-1,i=parseInt(e.substr(6,2),10),s=parseInt(e.substr(8,2),10),o=parseInt(e.substr(10,2),10),a=parseInt(e.substr(12,2),10),c=0,f=0,u=!1;e.charAt(e.length-1)==="Z"&&(u=!0);var h=e.length-5,l=e.charAt(h);if(l==="+"||l==="-"){var x=parseInt(e.substr(h+1,2),10),p=parseInt(e.substr(h+4,2),10);f=x*60+p,f*=6e4,l==="+"&&(f*=-1),u=!0}return e.charAt(14)==="."&&(c=parseFloat(e.substr(14),10)*1e3),u?(t.setUTCFullYear(r,n,i),t.setUTCHours(s,o,a,c),t.setTime(+t+f)):(t.setFullYear(r,n,i),t.setHours(s,o,a,c)),t};V.dateToUtcTime=function(e){if(typeof e=="string")return e;var t="",r=[];r.push((""+e.getUTCFullYear()).substr(2)),r.push(""+(e.getUTCMonth()+1)),r.push(""+e.getUTCDate()),r.push(""+e.getUTCHours()),r.push(""+e.getUTCMinutes()),r.push(""+e.getUTCSeconds());for(var n=0;n=-128&&e<128)return t.putSignedInt(e,8);if(e>=-32768&&e<32768)return t.putSignedInt(e,16);if(e>=-8388608&&e<8388608)return t.putSignedInt(e,24);if(e>=-2147483648&&e<2147483648)return t.putSignedInt(e,32);var r=new Error("Integer too large; max is 32-bits.");throw r.integer=e,r};V.derToInteger=function(e){typeof e=="string"&&(e=gt.util.createBuffer(e));var t=e.length()*8;if(t>32)throw new Error("Integer too large; max is 32-bits.");return e.getSignedInt(t)};V.validate=function(e,t,r,n){var i=!1;if((e.tagClass===t.tagClass||typeof t.tagClass>"u")&&(e.type===t.type||typeof t.type>"u"))if(e.constructed===t.constructed||typeof t.constructed>"u"){if(i=!0,t.value&>.util.isArray(t.value))for(var s=0,o=0;i&&o0&&(n+=` +`);for(var i="",s=0;s1?n+="0x"+gt.util.bytesToHex(e.value.slice(1)):n+="(none)",e.value.length>0){var f=e.value.charCodeAt(0);f==1?n+=" (1 unused bit shown)":f>1&&(n+=" ("+f+" unused bits shown)")}}else if(e.type===V.Type.OCTETSTRING)b0.test(e.value)||(n+="("+e.value+") "),n+="0x"+gt.util.bytesToHex(e.value);else if(e.type===V.Type.UTF8)try{n+=gt.util.decodeUtf8(e.value)}catch(u){if(u.message==="URI malformed")n+="0x"+gt.util.bytesToHex(e.value)+" (malformed UTF8)";else throw u}else e.type===V.Type.PRINTABLESTRING||e.type===V.Type.IA5String?n+=e.value:b0.test(e.value)?n+="0x"+gt.util.bytesToHex(e.value):e.value.length===0?n+="[null]":n+=e.value}return n}});var Ns=pt((Yg,w0)=>{var Nt=ht();Ct();w0.exports=Nt.cipher=Nt.cipher||{};Nt.cipher.algorithms=Nt.cipher.algorithms||{};Nt.cipher.createCipher=function(e,t){var r=e;if(typeof r=="string"&&(r=Nt.cipher.getAlgorithm(r),r&&(r=r())),!r)throw new Error("Unsupported algorithm: "+e);return new Nt.cipher.BlockCipher({algorithm:r,key:t,decrypt:!1})};Nt.cipher.createDecipher=function(e,t){var r=e;if(typeof r=="string"&&(r=Nt.cipher.getAlgorithm(r),r&&(r=r())),!r)throw new Error("Unsupported algorithm: "+e);return new Nt.cipher.BlockCipher({algorithm:r,key:t,decrypt:!0})};Nt.cipher.registerAlgorithm=function(e,t){e=e.toUpperCase(),Nt.cipher.algorithms[e]=t};Nt.cipher.getAlgorithm=function(e){return e=e.toUpperCase(),e in Nt.cipher.algorithms?Nt.cipher.algorithms[e]:null};var Rs=Nt.cipher.BlockCipher=function(e){this.algorithm=e.algorithm,this.mode=this.algorithm.mode,this.blockSize=this.mode.blockSize,this._finish=!1,this._input=null,this.output=null,this._op=e.decrypt?this.mode.decrypt:this.mode.encrypt,this._decrypt=e.decrypt,this.algorithm.initialize(e)};Rs.prototype.start=function(e){e=e||{};var t={};for(var r in e)t[r]=e[r];t.decrypt=this._decrypt,this._finish=!1,this._input=Nt.util.createBuffer(),this.output=e.output||Nt.util.createBuffer(),this.mode.start(t)};Rs.prototype.update=function(e){for(e&&this._input.putBuffer(e);!this._op.call(this.mode,this._input,this.output,this._finish)&&!this._finish;);this._input.compact()};Rs.prototype.finish=function(e){e&&(this.mode.name==="ECB"||this.mode.name==="CBC")&&(this.mode.pad=function(r){return e(this.blockSize,r,!1)},this.mode.unpad=function(r){return e(this.blockSize,r,!0)});var t={};return t.decrypt=this._decrypt,t.overflow=this._input.length()%this.blockSize,!(!this._decrypt&&this.mode.pad&&!this.mode.pad(this._input,t)||(this._finish=!0,this.update(),this._decrypt&&this.mode.unpad&&!this.mode.unpad(this.output,t))||this.mode.afterFinish&&!this.mode.afterFinish(this.output,t))}});var Ps=pt((Wg,E0)=>{var Dt=ht();Ct();Dt.cipher=Dt.cipher||{};var nt=E0.exports=Dt.cipher.modes=Dt.cipher.modes||{};nt.ecb=function(e){e=e||{},this.name="ECB",this.cipher=e.cipher,this.blockSize=e.blockSize||16,this._ints=this.blockSize/4,this._inBlock=new Array(this._ints),this._outBlock=new Array(this._ints)};nt.ecb.prototype.start=function(e){};nt.ecb.prototype.encrypt=function(e,t,r){if(e.length()0))return!0;for(var n=0;n0))return!0;for(var n=0;n0)return!1;var r=e.length(),n=e.at(r-1);return n>this.blockSize<<2?!1:(e.truncate(n),!0)};nt.cbc=function(e){e=e||{},this.name="CBC",this.cipher=e.cipher,this.blockSize=e.blockSize||16,this._ints=this.blockSize/4,this._inBlock=new Array(this._ints),this._outBlock=new Array(this._ints)};nt.cbc.prototype.start=function(e){if(e.iv===null){if(!this._prev)throw new Error("Invalid IV parameter.");this._iv=this._prev.slice(0)}else if("iv"in e)this._iv=ui(e.iv,this.blockSize),this._prev=this._iv.slice(0);else throw new Error("Invalid IV parameter.")};nt.cbc.prototype.encrypt=function(e,t,r){if(e.length()0))return!0;for(var n=0;n0))return!0;for(var n=0;n0)return!1;var r=e.length(),n=e.at(r-1);return n>this.blockSize<<2?!1:(e.truncate(n),!0)};nt.cfb=function(e){e=e||{},this.name="CFB",this.cipher=e.cipher,this.blockSize=e.blockSize||16,this._ints=this.blockSize/4,this._inBlock=null,this._outBlock=new Array(this._ints),this._partialBlock=new Array(this._ints),this._partialOutput=Dt.util.createBuffer(),this._partialBytes=0};nt.cfb.prototype.start=function(e){if(!("iv"in e))throw new Error("Invalid IV parameter.");this._iv=ui(e.iv,this.blockSize),this._inBlock=this._iv.slice(0),this._partialBytes=0};nt.cfb.prototype.encrypt=function(e,t,r){var n=e.length();if(n===0)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),this._partialBytes===0&&n>=this.blockSize){for(var i=0;i0&&(s=this.blockSize-s),this._partialOutput.clear();for(var i=0;i0)e.read-=this.blockSize;else for(var i=0;i0&&this._partialOutput.getBytes(this._partialBytes),s>0&&!r)return t.putBytes(this._partialOutput.getBytes(s-this._partialBytes)),this._partialBytes=s,!0;t.putBytes(this._partialOutput.getBytes(n-this._partialBytes)),this._partialBytes=0};nt.cfb.prototype.decrypt=function(e,t,r){var n=e.length();if(n===0)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),this._partialBytes===0&&n>=this.blockSize){for(var i=0;i0&&(s=this.blockSize-s),this._partialOutput.clear();for(var i=0;i0)e.read-=this.blockSize;else for(var i=0;i0&&this._partialOutput.getBytes(this._partialBytes),s>0&&!r)return t.putBytes(this._partialOutput.getBytes(s-this._partialBytes)),this._partialBytes=s,!0;t.putBytes(this._partialOutput.getBytes(n-this._partialBytes)),this._partialBytes=0};nt.ofb=function(e){e=e||{},this.name="OFB",this.cipher=e.cipher,this.blockSize=e.blockSize||16,this._ints=this.blockSize/4,this._inBlock=null,this._outBlock=new Array(this._ints),this._partialOutput=Dt.util.createBuffer(),this._partialBytes=0};nt.ofb.prototype.start=function(e){if(!("iv"in e))throw new Error("Invalid IV parameter.");this._iv=ui(e.iv,this.blockSize),this._inBlock=this._iv.slice(0),this._partialBytes=0};nt.ofb.prototype.encrypt=function(e,t,r){var n=e.length();if(e.length()===0)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),this._partialBytes===0&&n>=this.blockSize){for(var i=0;i0&&(s=this.blockSize-s),this._partialOutput.clear();for(var i=0;i0)e.read-=this.blockSize;else for(var i=0;i0&&this._partialOutput.getBytes(this._partialBytes),s>0&&!r)return t.putBytes(this._partialOutput.getBytes(s-this._partialBytes)),this._partialBytes=s,!0;t.putBytes(this._partialOutput.getBytes(n-this._partialBytes)),this._partialBytes=0};nt.ofb.prototype.decrypt=nt.ofb.prototype.encrypt;nt.ctr=function(e){e=e||{},this.name="CTR",this.cipher=e.cipher,this.blockSize=e.blockSize||16,this._ints=this.blockSize/4,this._inBlock=null,this._outBlock=new Array(this._ints),this._partialOutput=Dt.util.createBuffer(),this._partialBytes=0};nt.ctr.prototype.start=function(e){if(!("iv"in e))throw new Error("Invalid IV parameter.");this._iv=ui(e.iv,this.blockSize),this._inBlock=this._iv.slice(0),this._partialBytes=0};nt.ctr.prototype.encrypt=function(e,t,r){var n=e.length();if(n===0)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),this._partialBytes===0&&n>=this.blockSize)for(var i=0;i0&&(s=this.blockSize-s),this._partialOutput.clear();for(var i=0;i0&&(e.read-=this.blockSize),this._partialBytes>0&&this._partialOutput.getBytes(this._partialBytes),s>0&&!r)return t.putBytes(this._partialOutput.getBytes(s-this._partialBytes)),this._partialBytes=s,!0;t.putBytes(this._partialOutput.getBytes(n-this._partialBytes)),this._partialBytes=0}hi(this._inBlock)};nt.ctr.prototype.decrypt=nt.ctr.prototype.encrypt;nt.gcm=function(e){e=e||{},this.name="GCM",this.cipher=e.cipher,this.blockSize=e.blockSize||16,this._ints=this.blockSize/4,this._inBlock=new Array(this._ints),this._outBlock=new Array(this._ints),this._partialOutput=Dt.util.createBuffer(),this._partialBytes=0,this._R=3774873600};nt.gcm.prototype.start=function(e){if(!("iv"in e))throw new Error("Invalid IV parameter.");var t=Dt.util.createBuffer(e.iv);this._cipherLength=0;var r;if("additionalData"in e?r=Dt.util.createBuffer(e.additionalData):r=Dt.util.createBuffer(),"tagLength"in e?this._tagLength=e.tagLength:this._tagLength=128,this._tag=null,e.decrypt&&(this._tag=Dt.util.createBuffer(e.tag).getBytes(),this._tag.length!==this._tagLength/8))throw new Error("Authentication tag does not match tag length.");this._hashBlock=new Array(this._ints),this.tag=null,this._hashSubkey=new Array(this._ints),this.cipher.encrypt([0,0,0,0],this._hashSubkey),this.componentBits=4,this._m=this.generateHashTable(this._hashSubkey,this.componentBits);var n=t.length();if(n===12)this._j0=[t.getInt32(),t.getInt32(),t.getInt32(),1];else{for(this._j0=[0,0,0,0];t.length()>0;)this._j0=this.ghash(this._hashSubkey,this._j0,[t.getInt32(),t.getInt32(),t.getInt32(),t.getInt32()]);this._j0=this.ghash(this._hashSubkey,this._j0,[0,0].concat(Ds(n*8)))}this._inBlock=this._j0.slice(0),hi(this._inBlock),this._partialBytes=0,r=Dt.util.createBuffer(r),this._aDataLength=Ds(r.length()*8);var i=r.length()%this.blockSize;for(i&&r.fillWithByte(0,this.blockSize-i),this._s=[0,0,0,0];r.length()>0;)this._s=this.ghash(this._hashSubkey,this._s,[r.getInt32(),r.getInt32(),r.getInt32(),r.getInt32()])};nt.gcm.prototype.encrypt=function(e,t,r){var n=e.length();if(n===0)return!0;if(this.cipher.encrypt(this._inBlock,this._outBlock),this._partialBytes===0&&n>=this.blockSize){for(var i=0;i0&&(s=this.blockSize-s),this._partialOutput.clear();for(var i=0;i0&&this._partialOutput.getBytes(this._partialBytes),s>0&&!r)return e.read-=this.blockSize,t.putBytes(this._partialOutput.getBytes(s-this._partialBytes)),this._partialBytes=s,!0;t.putBytes(this._partialOutput.getBytes(n-this._partialBytes)),this._partialBytes=0}this._s=this.ghash(this._hashSubkey,this._s,this._outBlock),hi(this._inBlock)};nt.gcm.prototype.decrypt=function(e,t,r){var n=e.length();if(n0))return!0;this.cipher.encrypt(this._inBlock,this._outBlock),hi(this._inBlock),this._hashBlock[0]=e.getInt32(),this._hashBlock[1]=e.getInt32(),this._hashBlock[2]=e.getInt32(),this._hashBlock[3]=e.getInt32(),this._s=this.ghash(this._hashSubkey,this._s,this._hashBlock);for(var i=0;i0;--n)t[n]=e[n]>>>1|(e[n-1]&1)<<31;t[0]=e[0]>>>1,r&&(t[0]^=this._R)};nt.gcm.prototype.tableMultiply=function(e){for(var t=[0,0,0,0],r=0;r<32;++r){var n=r/8|0,i=e[n]>>>(7-r%8)*4&15,s=this._m[r][i];t[0]^=s[0],t[1]^=s[1],t[2]^=s[2],t[3]^=s[3]}return t};nt.gcm.prototype.ghash=function(e,t,r){return t[0]^=r[0],t[1]^=r[1],t[2]^=r[2],t[3]^=r[3],this.tableMultiply(t)};nt.gcm.prototype.generateHashTable=function(e,t){for(var r=8/t,n=4*r,i=16*r,s=new Array(i),o=0;o>>1,i=new Array(r);i[n]=e.slice(0);for(var s=n>>>1;s>0;)this.pow(i[2*s],i[s]=[]),s>>=1;for(s=2;s4){var r=e;e=Dt.util.createBuffer();for(var n=0;n{var dt=ht();Ns();Ps();Ct();C0.exports=dt.aes=dt.aes||{};dt.aes.startEncrypting=function(e,t,r,n){var i=li({key:e,output:r,decrypt:!1,mode:n});return i.start(t),i};dt.aes.createEncryptionCipher=function(e,t){return li({key:e,output:null,decrypt:!1,mode:t})};dt.aes.startDecrypting=function(e,t,r,n){var i=li({key:e,output:r,decrypt:!0,mode:n});return i.start(t),i};dt.aes.createDecryptionCipher=function(e,t){return li({key:e,output:null,decrypt:!0,mode:t})};dt.aes.Algorithm=function(e,t){Ks||B0();var r=this;r.name=e,r.mode=new t({blockSize:16,cipher:{encrypt:function(n,i){return Us(r._w,n,i,!1)},decrypt:function(n,i){return Us(r._w,n,i,!0)}}}),r._init=!1};dt.aes.Algorithm.prototype.initialize=function(e){if(!this._init){var t=e.key,r;if(typeof t=="string"&&(t.length===16||t.length===24||t.length===32))t=dt.util.createBuffer(t);else if(dt.util.isArray(t)&&(t.length===16||t.length===24||t.length===32)){r=t,t=dt.util.createBuffer();for(var n=0;n>>2;for(var n=0;n>8^a&255^99,Ht[r]=a,ks[a]=r,c=e[a],i=e[r],s=e[i],o=e[s],f=c<<24^a<<16^a<<8^(a^c),u=(i^s^o)<<24^(r^o)<<16^(r^s^o)<<8^(r^i^o);for(var h=0;h<4;++h)nr[h][r]=f,ae[h][a]=u,f=f<<24|f>>>8,u=u<<24|u>>>8;r===0?r=n=1:(r=i^e[e[e[i^o]]],n^=e[e[n]])}}function A0(e,t){for(var r=e.slice(0),n,i=1,s=r.length,o=s+6+1,a=Rr*o,c=s;c>>16&255]<<24^Ht[n>>>8&255]<<16^Ht[n&255]<<8^Ht[n>>>24]^S0[i]<<24,i++):s>6&&c%s===4&&(n=Ht[n>>>24]<<24^Ht[n>>>16&255]<<16^Ht[n>>>8&255]<<8^Ht[n&255]),r[c]=r[c-s]^n;if(t){var f,u=ae[0],h=ae[1],l=ae[2],x=ae[3],p=r.slice(0);a=r.length;for(var c=0,d=a-Rr;c>>24]]^h[Ht[f>>>16&255]]^l[Ht[f>>>8&255]]^x[Ht[f&255]];r=p}return r}function Us(e,t,r,n){var i=e.length/4-1,s,o,a,c,f;n?(s=ae[0],o=ae[1],a=ae[2],c=ae[3],f=ks):(s=nr[0],o=nr[1],a=nr[2],c=nr[3],f=Ht);var u,h,l,x,p,d,y;u=t[0]^e[0],h=t[n?3:1]^e[1],l=t[2]^e[2],x=t[n?1:3]^e[3];for(var g=3,v=1;v>>24]^o[h>>>16&255]^a[l>>>8&255]^c[x&255]^e[++g],d=s[h>>>24]^o[l>>>16&255]^a[x>>>8&255]^c[u&255]^e[++g],y=s[l>>>24]^o[x>>>16&255]^a[u>>>8&255]^c[h&255]^e[++g],x=s[x>>>24]^o[u>>>16&255]^a[h>>>8&255]^c[l&255]^e[++g],u=p,h=d,l=y;r[0]=f[u>>>24]<<24^f[h>>>16&255]<<16^f[l>>>8&255]<<8^f[x&255]^e[++g],r[n?3:1]=f[h>>>24]<<24^f[l>>>16&255]<<16^f[x>>>8&255]<<8^f[u&255]^e[++g],r[2]=f[l>>>24]<<24^f[x>>>16&255]<<16^f[u>>>8&255]<<8^f[h&255]^e[++g],r[n?1:3]=f[x>>>24]<<24^f[u>>>16&255]<<16^f[h>>>8&255]<<8^f[l&255]^e[++g]}function li(e){e=e||{};var t=(e.mode||"CBC").toUpperCase(),r="AES-"+t,n;e.decrypt?n=dt.cipher.createDecipher(r,e.key):n=dt.cipher.createCipher(r,e.key);var i=n.start;return n.start=function(s,o){var a=null;o instanceof dt.util.ByteBuffer&&(a=o,o={}),o=o||{},o.output=a,o.iv=s,i.call(n,o)},n}});var _0=pt((Zg,T0)=>{var vt=ht();Ns();Ps();Ct();T0.exports=vt.des=vt.des||{};vt.des.startEncrypting=function(e,t,r,n){var i=pi({key:e,output:r,decrypt:!1,mode:n||(t===null?"ECB":"CBC")});return i.start(t),i};vt.des.createEncryptionCipher=function(e,t){return pi({key:e,output:null,decrypt:!1,mode:t})};vt.des.startDecrypting=function(e,t,r,n){var i=pi({key:e,output:r,decrypt:!0,mode:n||(t===null?"ECB":"CBC")});return i.start(t),i};vt.des.createDecryptionCipher=function(e,t){return pi({key:e,output:null,decrypt:!0,mode:t})};vt.des.Algorithm=function(e,t){var r=this;r.name=e,r.mode=new t({blockSize:8,cipher:{encrypt:function(n,i){return I0(r._keys,n,i,!1)},decrypt:function(n,i){return I0(r._keys,n,i,!0)}}}),r._init=!1};vt.des.Algorithm.prototype.initialize=function(e){if(!this._init){var t=vt.util.createBuffer(e.key);if(this.name.indexOf("3DES")===0&&t.length()!==24)throw new Error("Invalid Triple-DES key size: "+t.length()*8);this._keys=cl(t),this._init=!0}};le("DES-ECB",vt.cipher.modes.ecb);le("DES-CBC",vt.cipher.modes.cbc);le("DES-CFB",vt.cipher.modes.cfb);le("DES-OFB",vt.cipher.modes.ofb);le("DES-CTR",vt.cipher.modes.ctr);le("3DES-ECB",vt.cipher.modes.ecb);le("3DES-CBC",vt.cipher.modes.cbc);le("3DES-CFB",vt.cipher.modes.cfb);le("3DES-OFB",vt.cipher.modes.ofb);le("3DES-CTR",vt.cipher.modes.ctr);function le(e,t){var r=function(){return new vt.des.Algorithm(e,t)};vt.cipher.registerAlgorithm(e,r)}var tl=[16843776,0,65536,16843780,16842756,66564,4,65536,1024,16843776,16843780,1024,16778244,16842756,16777216,4,1028,16778240,16778240,66560,66560,16842752,16842752,16778244,65540,16777220,16777220,65540,0,1028,66564,16777216,65536,16843780,4,16842752,16843776,16777216,16777216,1024,16842756,65536,66560,16777220,1024,4,16778244,66564,16843780,65540,16842752,16778244,16777220,1028,66564,16843776,1028,16778240,16778240,0,65540,66560,0,16842756],el=[-2146402272,-2147450880,32768,1081376,1048576,32,-2146435040,-2147450848,-2147483616,-2146402272,-2146402304,-2147483648,-2147450880,1048576,32,-2146435040,1081344,1048608,-2147450848,0,-2147483648,32768,1081376,-2146435072,1048608,-2147483616,0,1081344,32800,-2146402304,-2146435072,32800,0,1081376,-2146435040,1048576,-2147450848,-2146435072,-2146402304,32768,-2146435072,-2147450880,32,-2146402272,1081376,32,32768,-2147483648,32800,-2146402304,1048576,-2147483616,1048608,-2147450848,-2147483616,1048608,1081344,0,-2147450880,32800,-2147483648,-2146435040,-2146402272,1081344],rl=[520,134349312,0,134348808,134218240,0,131592,134218240,131080,134217736,134217736,131072,134349320,131080,134348800,520,134217728,8,134349312,512,131584,134348800,134348808,131592,134218248,131584,131072,134218248,8,134349320,512,134217728,134349312,134217728,131080,520,131072,134349312,134218240,0,512,131080,134349320,134218240,134217736,512,0,134348808,134218248,131072,134217728,134349320,8,131592,131584,134217736,134348800,134218248,520,134348800,131592,8,134348808,131584],nl=[8396801,8321,8321,128,8396928,8388737,8388609,8193,0,8396800,8396800,8396929,129,0,8388736,8388609,1,8192,8388608,8396801,128,8388608,8193,8320,8388737,1,8320,8388736,8192,8396928,8396929,129,8388736,8388609,8396800,8396929,129,0,0,8396800,8320,8388736,8388737,1,8396801,8321,8321,128,8396929,129,1,8192,8388609,8193,8396928,8388737,8193,8320,8388608,8396801,128,8388608,8192,8396928],il=[256,34078976,34078720,1107296512,524288,256,1073741824,34078720,1074266368,524288,33554688,1074266368,1107296512,1107820544,524544,1073741824,33554432,1074266112,1074266112,0,1073742080,1107820800,1107820800,33554688,1107820544,1073742080,0,1107296256,34078976,33554432,1107296256,524544,524288,1107296512,256,33554432,1073741824,34078720,1107296512,1074266368,33554688,1073741824,1107820544,34078976,1074266368,256,33554432,1107820544,1107820800,524544,1107296256,1107820800,34078720,0,1074266112,1107296256,524544,33554688,1073742080,524288,0,1074266112,34078976,1073742080],sl=[536870928,541065216,16384,541081616,541065216,16,541081616,4194304,536887296,4210704,4194304,536870928,4194320,536887296,536870912,16400,0,4194320,536887312,16384,4210688,536887312,16,541065232,541065232,0,4210704,541081600,16400,4210688,541081600,536870912,536887296,16,541065232,4210688,541081616,4194304,16400,536870928,4194304,536887296,536870912,16400,536870928,541081616,4210688,541065216,4210704,541081600,0,541065232,16,16384,541065216,4210704,16384,4194320,536887312,0,541081600,536870912,4194320,536887312],ol=[2097152,69206018,67110914,0,2048,67110914,2099202,69208064,69208066,2097152,0,67108866,2,67108864,69206018,2050,67110912,2099202,2097154,67110912,67108866,69206016,69208064,2097154,69206016,2048,2050,69208066,2099200,2,67108864,2099200,67108864,2099200,2097152,67110914,67110914,69206018,69206018,2,2097154,67108864,67110912,2097152,69208064,2050,2099202,69208064,2050,67108866,69208066,69206016,2099200,0,2,69208066,0,2099202,69206016,2048,67108866,67110912,2048,2097154],al=[268439616,4096,262144,268701760,268435456,268439616,64,268435456,262208,268697600,268701760,266240,268701696,266304,4096,64,268697600,268435520,268439552,4160,266240,262208,268697664,268701696,4160,0,0,268697664,268435520,268439552,266304,262144,266304,262144,268701696,4096,64,268697664,4096,266304,268439552,64,268435520,268697600,268697664,268435456,262144,268439616,0,268701760,262208,268435520,268697600,268439552,268439616,0,268701760,266240,266240,4160,4160,262208,268435456,268701696];function cl(e){for(var t=[0,4,536870912,536870916,65536,65540,536936448,536936452,512,516,536871424,536871428,66048,66052,536936960,536936964],r=[0,1,1048576,1048577,67108864,67108865,68157440,68157441,256,257,1048832,1048833,67109120,67109121,68157696,68157697],n=[0,8,2048,2056,16777216,16777224,16779264,16779272,0,8,2048,2056,16777216,16777224,16779264,16779272],i=[0,2097152,134217728,136314880,8192,2105344,134225920,136323072,131072,2228224,134348800,136445952,139264,2236416,134356992,136454144],s=[0,262144,16,262160,0,262144,16,262160,4096,266240,4112,266256,4096,266240,4112,266256],o=[0,1024,32,1056,0,1024,32,1056,33554432,33555456,33554464,33555488,33554432,33555456,33554464,33555488],a=[0,268435456,524288,268959744,2,268435458,524290,268959746,0,268435456,524288,268959744,2,268435458,524290,268959746],c=[0,65536,2048,67584,536870912,536936448,536872960,536938496,131072,196608,133120,198656,537001984,537067520,537004032,537069568],f=[0,262144,0,262144,2,262146,2,262146,33554432,33816576,33554432,33816576,33554434,33816578,33554434,33816578],u=[0,268435456,8,268435464,0,268435456,8,268435464,1024,268436480,1032,268436488,1024,268436480,1032,268436488],h=[0,32,0,32,1048576,1048608,1048576,1048608,8192,8224,8192,8224,1056768,1056800,1056768,1056800],l=[0,16777216,512,16777728,2097152,18874368,2097664,18874880,67108864,83886080,67109376,83886592,69206016,85983232,69206528,85983744],x=[0,4096,134217728,134221824,524288,528384,134742016,134746112,16,4112,134217744,134221840,524304,528400,134742032,134746128],p=[0,4,256,260,0,4,256,260,1,5,257,261,1,5,257,261],d=e.length()>8?3:1,y=[],g=[0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0],v=0,m,C=0;C>>4^B)&252645135,B^=m,S^=m<<4,m=(B>>>-16^S)&65535,S^=m,B^=m<<-16,m=(S>>>2^B)&858993459,B^=m,S^=m<<2,m=(B>>>-16^S)&65535,S^=m,B^=m<<-16,m=(S>>>1^B)&1431655765,B^=m,S^=m<<1,m=(B>>>8^S)&16711935,S^=m,B^=m<<8,m=(S>>>1^B)&1431655765,B^=m,S^=m<<1,m=S<<8|B>>>20&240,S=B<<24|B<<8&16711680|B>>>8&65280|B>>>24&240,B=m;for(var R=0;R>>26,B=B<<2|B>>>26):(S=S<<1|S>>>27,B=B<<1|B>>>27),S&=-15,B&=-15;var L=t[S>>>28]|r[S>>>24&15]|n[S>>>20&15]|i[S>>>16&15]|s[S>>>12&15]|o[S>>>8&15]|a[S>>>4&15],O=c[B>>>28]|f[B>>>24&15]|u[B>>>20&15]|h[B>>>16&15]|l[B>>>12&15]|x[B>>>8&15]|p[B>>>4&15];m=(O>>>16^L)&65535,y[v++]=L^m,y[v++]=O^m<<16}}return y}function I0(e,t,r,n){var i=e.length===32?3:9,s;i===3?s=n?[30,-2,-2]:[0,32,2]:s=n?[94,62,-2,32,64,2,30,-2,-2]:[0,32,2,62,30,-2,64,96,2];var o,a=t[0],c=t[1];o=(a>>>4^c)&252645135,c^=o,a^=o<<4,o=(a>>>16^c)&65535,c^=o,a^=o<<16,o=(c>>>2^a)&858993459,a^=o,c^=o<<2,o=(c>>>8^a)&16711935,a^=o,c^=o<<8,o=(a>>>1^c)&1431655765,c^=o,a^=o<<1,a=a<<1|a>>>31,c=c<<1|c>>>31;for(var f=0;f>>4|c<<28)^e[l+1];o=a,a=c,c=o^(el[x>>>24&63]|nl[x>>>16&63]|sl[x>>>8&63]|al[x&63]|tl[p>>>24&63]|rl[p>>>16&63]|il[p>>>8&63]|ol[p&63])}o=a,a=c,c=o}a=a>>>1|a<<31,c=c>>>1|c<<31,o=(a>>>1^c)&1431655765,c^=o,a^=o<<1,o=(c>>>8^a)&16711935,a^=o,c^=o<<8,o=(c>>>2^a)&858993459,a^=o,c^=o<<2,o=(a>>>16^c)&65535,c^=o,a^=o<<16,o=(a>>>4^c)&252645135,c^=o,a^=o<<4,r[0]=a,r[1]=c}function pi(e){e=e||{};var t=(e.mode||"CBC").toUpperCase(),r="DES-"+t,n;e.decrypt?n=vt.cipher.createDecipher(r,e.key):n=vt.cipher.createCipher(r,e.key);var i=n.start;return n.start=function(s,o){var a=null;o instanceof vt.util.ByteBuffer&&(a=o,o={}),o=o||{},o.output=a,o.iv=s,i.call(n,o)},n}});var ir=pt((Xg,L0)=>{var di=ht();L0.exports=di.md=di.md||{};di.md.algorithms=di.md.algorithms||{}});var N0=pt((Qg,R0)=>{var Le=ht();ir();Ct();var fl=R0.exports=Le.hmac=Le.hmac||{};fl.create=function(){var e=null,t=null,r=null,n=null,i={};return i.start=function(s,o){if(s!==null)if(typeof s=="string")if(s=s.toLowerCase(),s in Le.md.algorithms)t=Le.md.algorithms[s].create();else throw new Error('Unknown hash algorithm "'+s+'"');else t=s;if(o===null)o=e;else{if(typeof o=="string")o=Le.util.createBuffer(o);else if(Le.util.isArray(o)){var a=o;o=Le.util.createBuffer();for(var c=0;ct.blockLength&&(t.start(),t.update(o.bytes()),o=t.digest()),r=Le.util.createBuffer(),n=Le.util.createBuffer(),f=o.length();for(var c=0;c{});var P0=pt((t2,D0)=>{var qt=ht();N0();ir();Ct();var ul=qt.pkcs5=qt.pkcs5||{},Re;qt.util.isNodejs&&!qt.options.usePureJavaScript&&(Re=yi());D0.exports=qt.pbkdf2=ul.pbkdf2=function(e,t,r,n,i,s){if(typeof i=="function"&&(s=i,i=null),qt.util.isNodejs&&!qt.options.usePureJavaScript&&Re.pbkdf2&&(i===null||typeof i!="object")&&(Re.pbkdf2Sync.length>4||!i||i==="sha1"))return typeof i!="string"&&(i="sha1"),e=Buffer.from(e,"binary"),t=Buffer.from(t,"binary"),s?Re.pbkdf2Sync.length===4?Re.pbkdf2(e,t,r,n,function(m,C){if(m)return s(m);s(null,C.toString("binary"))}):Re.pbkdf2(e,t,r,n,i,function(m,C){if(m)return s(m);s(null,C.toString("binary"))}):Re.pbkdf2Sync.length===4?Re.pbkdf2Sync(e,t,r,n).toString("binary"):Re.pbkdf2Sync(e,t,r,n,i).toString("binary");if((typeof i>"u"||i===null)&&(i="sha1"),typeof i=="string"){if(!(i in qt.md.algorithms))throw new Error("Unknown hash algorithm: "+i);i=qt.md[i].create()}var o=i.digestLength;if(n>4294967295*o){var a=new Error("Derived key is too long.");if(s)return s(a);throw a}var c=Math.ceil(n/o),f=n-(c-1)*o,u=qt.hmac.create();u.start(i,e);var h="",l,x,p;if(!s){for(var d=1;d<=c;++d){u.start(null,null),u.update(t),u.update(qt.util.int32ToBytes(d)),l=p=u.digest().getBytes();for(var y=2;y<=r;++y)u.start(null,null),u.update(p),x=u.digest().getBytes(),l=qt.util.xorBytes(l,x,o),p=x;h+=dc)return s(null,h);u.start(null,null),u.update(t),u.update(qt.util.int32ToBytes(d)),l=p=u.digest().getBytes(),y=2,v()}function v(){if(y<=r)return u.start(null,null),u.update(p),x=u.digest().getBytes(),l=qt.util.xorBytes(l,x,o),p=x,++y,qt.util.setImmediate(v);h+=d{var gi=ht();Ct();var k0=U0.exports=gi.pem=gi.pem||{};k0.encode=function(e,t){t=t||{};var r="-----BEGIN "+e.type+`-----\r +`,n;if(e.procType&&(n={name:"Proc-Type",values:[String(e.procType.version),e.procType.type]},r+=xi(n)),e.contentDomain&&(n={name:"Content-Domain",values:[e.contentDomain]},r+=xi(n)),e.dekInfo&&(n={name:"DEK-Info",values:[e.dekInfo.algorithm]},e.dekInfo.parameters&&n.values.push(e.dekInfo.parameters),r+=xi(n)),e.headers)for(var i=0;i65&&o!==-1){var a=t[o];a===","?(++o,t=t.substr(0,o)+`\r + `+t.substr(o)):t=t.substr(0,o)+`\r +`+a+t.substr(o+1),s=i-o-1,o=-1,++i}else(t[i]===" "||t[i]===" "||t[i]===",")&&(o=i);return t}function hl(e){return e.replace(/^\s+/,"")}});var q0=pt((r2,H0)=>{var pe=ht();ir();Ct();var M0=H0.exports=pe.sha256=pe.sha256||{};pe.md.sha256=pe.md.algorithms.sha256=M0;M0.create=function(){V0||ll();var e=null,t=pe.util.createBuffer(),r=new Array(64),n={algorithm:"sha256",blockLength:64,digestLength:32,messageLength:0,fullMessageLength:null,messageLengthSize:8};return n.start=function(){n.messageLength=0,n.fullMessageLength=n.messageLength64=[];for(var i=n.messageLengthSize/4,s=0;s>>0,o>>>0];for(var a=n.fullMessageLength.length-1;a>=0;--a)n.fullMessageLength[a]+=o[1],o[1]=o[0]+(n.fullMessageLength[a]/4294967296>>>0),n.fullMessageLength[a]=n.fullMessageLength[a]>>>0,o[0]=o[1]/4294967296>>>0;return t.putBytes(i),O0(e,r,t),(t.read>2048||t.length()===0)&&t.compact(),n},n.digest=function(){var i=pe.util.createBuffer();i.putBytes(t.bytes());var s=n.fullMessageLength[n.fullMessageLength.length-1]+n.messageLengthSize,o=s&n.blockLength-1;i.putBytes(Ms.substr(0,n.blockLength-o));for(var a,c,f=n.fullMessageLength[0]*8,u=0;u>>0,f+=c,i.putInt32(f>>>0),f=a>>>0;i.putInt32(f);var h={h0:e.h0,h1:e.h1,h2:e.h2,h3:e.h3,h4:e.h4,h5:e.h5,h6:e.h6,h7:e.h7};O0(h,r,i);var l=pe.util.createBuffer();return l.putInt32(h.h0),l.putInt32(h.h1),l.putInt32(h.h2),l.putInt32(h.h3),l.putInt32(h.h4),l.putInt32(h.h5),l.putInt32(h.h6),l.putInt32(h.h7),l},n};var Ms=null,V0=!1,F0=null;function ll(){Ms="\x80",Ms+=pe.util.fillString("\0",64),F0=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],V0=!0}function O0(e,t,r){for(var n,i,s,o,a,c,f,u,h,l,x,p,d,y,g,v=r.length();v>=64;){for(f=0;f<16;++f)t[f]=r.getInt32();for(;f<64;++f)n=t[f-2],n=(n>>>17|n<<15)^(n>>>19|n<<13)^n>>>10,i=t[f-15],i=(i>>>7|i<<25)^(i>>>18|i<<14)^i>>>3,t[f]=n+t[f-7]+i+t[f-16]|0;for(u=e.h0,h=e.h1,l=e.h2,x=e.h3,p=e.h4,d=e.h5,y=e.h6,g=e.h7,f=0;f<64;++f)o=(p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7),a=y^p&(d^y),s=(u>>>2|u<<30)^(u>>>13|u<<19)^(u>>>22|u<<10),c=u&h|l&(u^h),n=g+o+a+F0[f]+t[f],i=s+c,g=y,y=d,d=p,p=x+n>>>0,x=l,l=h,h=u,u=n+i>>>0;e.h0=e.h0+u|0,e.h1=e.h1+h|0,e.h2=e.h2+l|0,e.h3=e.h3+x|0,e.h4=e.h4+p|0,e.h5=e.h5+d|0,e.h6=e.h6+y|0,e.h7=e.h7+g|0,v-=64}}});var G0=pt((n2,z0)=>{var de=ht();Ct();var mi=null;de.util.isNodejs&&!de.options.usePureJavaScript&&!process.versions["node-webkit"]&&(mi=yi());var pl=z0.exports=de.prng=de.prng||{};pl.create=function(e){for(var t={plugin:e,key:null,seed:null,time:null,reseeds:0,generated:0,keyBytes:""},r=e.md,n=new Array(32),i=0;i<32;++i)n[i]=r.create();t.pools=n,t.pool=0,t.generate=function(f,u){if(!u)return t.generateSync(f);var h=t.plugin.cipher,l=t.plugin.increment,x=t.plugin.formatKey,p=t.plugin.formatSeed,d=de.util.createBuffer();t.key=null,y();function y(g){if(g)return u(g);if(d.length()>=f)return u(null,d.getBytes(f));if(t.generated>1048575&&(t.key=null),t.key===null)return de.util.nextTick(function(){s(y)});var v=h(t.key,t.seed);t.generated+=v.length,d.putBytes(v),t.key=x(h(t.key,l(t.seed))),t.seed=p(h(t.key,t.seed)),de.util.setImmediate(y)}},t.generateSync=function(f){var u=t.plugin.cipher,h=t.plugin.increment,l=t.plugin.formatKey,x=t.plugin.formatSeed;t.key=null;for(var p=de.util.createBuffer();p.length()1048575&&(t.key=null),t.key===null&&o();var d=u(t.key,t.seed);t.generated+=d.length,p.putBytes(d),t.key=l(u(t.key,h(t.seed))),t.seed=x(u(t.key,t.seed))}return p.getBytes(f)};function s(f){if(t.pools[0].messageLength>=32)return a(),f();var u=32-t.pools[0].messageLength<<5;t.seedFile(u,function(h,l){if(h)return f(h);t.collect(l),a(),f()})}function o(){if(t.pools[0].messageLength>=32)return a();var f=32-t.pools[0].messageLength<<5;t.collect(t.seedFileSync(f)),a()}function a(){t.reseeds=t.reseeds===4294967295?0:t.reseeds+1;var f=t.plugin.md.create();f.update(t.keyBytes);for(var u=1,h=0;h<32;++h)t.reseeds%u===0&&(f.update(t.pools[h].digest().getBytes()),t.pools[h].start()),u=u<<1;t.keyBytes=f.digest().getBytes(),f.start(),f.update(t.keyBytes);var l=f.digest().getBytes();t.key=t.plugin.formatKey(t.keyBytes),t.seed=t.plugin.formatSeed(l),t.generated=0}function c(f){var u=null,h=de.util.globalScope,l=h.crypto||h.msCrypto;l&&l.getRandomValues&&(u=function(S){return l.getRandomValues(S)});var x=de.util.createBuffer();if(u)for(;x.length()>16),v+=(g&32767)<<16,v+=g>>15,v=(v&2147483647)+(v>>31),C=v&4294967295;for(var y=0;y<3;++y)m=C>>>(y<<3),m^=Math.floor(Math.random()*256),x.putByte(m&255)}return x.getBytes(f)}return mi?(t.seedFile=function(f,u){mi.randomBytes(f,function(h,l){if(h)return u(h);u(null,l.toString())})},t.seedFileSync=function(f){return mi.randomBytes(f).toString()}):(t.seedFile=function(f,u){try{u(null,c(f))}catch(h){u(h)}},t.seedFileSync=c),t.collect=function(f){for(var u=f.length,h=0;h>l&255);t.collect(h)},t.registerWorker=function(f){if(f===self)t.seedFile=function(h,l){function x(p){var d=p.data;d.forge&&d.forge.prng&&(self.removeEventListener("message",x),l(d.forge.prng.err,d.forge.prng.bytes))}self.addEventListener("message",x),self.postMessage({forge:{prng:{needed:h}}})};else{var u=function(h){var l=h.data;l.forge&&l.forge.prng&&t.seedFile(l.forge.prng.needed,function(x,p){f.postMessage({forge:{prng:{err:x,bytes:p}}})})};f.addEventListener("message",u)}},t}});var pn=pt((i2,Vs)=>{var Pt=ht();Os();q0();G0();Ct();(function(){if(Pt.random&&Pt.random.getBytes){Vs.exports=Pt.random;return}(function(e){var t={},r=new Array(4),n=Pt.util.createBuffer();t.formatKey=function(h){var l=Pt.util.createBuffer(h);return h=new Array(4),h[0]=l.getInt32(),h[1]=l.getInt32(),h[2]=l.getInt32(),h[3]=l.getInt32(),Pt.aes._expandKey(h,!1)},t.formatSeed=function(h){var l=Pt.util.createBuffer(h);return h=new Array(4),h[0]=l.getInt32(),h[1]=l.getInt32(),h[2]=l.getInt32(),h[3]=l.getInt32(),h},t.cipher=function(h,l){return Pt.aes._updateBlock(h,l,r,!1),n.putInt32(r[0]),n.putInt32(r[1]),n.putInt32(r[2]),n.putInt32(r[3]),n.getBytes()},t.increment=function(h){return++h[3],h},t.md=Pt.md.sha256;function i(){var h=Pt.prng.create(t);return h.getBytes=function(l,x){return h.generate(l,x)},h.getBytesSync=function(l){return h.generate(l)},h}var s=i(),o=null,a=Pt.util.globalScope,c=a.crypto||a.msCrypto;if(c&&c.getRandomValues&&(o=function(h){return c.getRandomValues(h)}),Pt.options.usePureJavaScript||!Pt.util.isNodejs&&!o){if(typeof window>"u"||window.document,s.collectInt(+new Date,32),typeof navigator<"u"){var f="";for(var u in navigator)try{typeof navigator[u]=="string"&&(f+=navigator[u])}catch{}s.collect(f),f=null}e&&(e().mousemove(function(h){s.collectInt(h.clientX,16),s.collectInt(h.clientY,16)}),e().keypress(function(h){s.collectInt(h.charCode,8)}))}if(!Pt.random)Pt.random=s;else for(var u in s)Pt.random[u]=s[u];Pt.random.createInstance=i,Vs.exports=Pt.random})(typeof jQuery<"u"?jQuery:null)})()});var Z0=pt((s2,$0)=>{var Yt=ht();Ct();var Fs=[217,120,249,196,25,221,181,237,40,233,253,121,74,160,216,157,198,126,55,131,43,118,83,142,98,76,100,136,68,139,251,162,23,154,89,245,135,179,79,19,97,69,109,141,9,129,125,50,189,143,64,235,134,183,123,11,240,149,33,34,92,107,78,130,84,214,101,147,206,96,178,28,115,86,192,20,167,140,241,220,18,117,202,31,59,190,228,209,66,61,212,48,163,60,182,38,111,191,14,218,70,105,7,87,39,242,29,155,188,148,67,3,248,17,199,246,144,239,62,231,6,195,213,47,200,102,30,215,8,232,234,222,128,82,238,247,132,170,114,172,53,77,106,42,150,26,210,113,90,21,73,116,75,159,208,94,4,24,164,236,194,224,65,110,15,81,203,204,36,145,175,80,161,244,112,57,153,124,58,133,35,184,180,122,252,2,54,91,37,85,151,49,45,93,250,152,227,138,146,174,5,223,41,16,103,108,186,201,211,0,230,207,225,158,168,44,99,22,1,63,88,226,137,169,13,56,52,27,171,51,255,176,187,72,12,95,185,177,205,46,197,243,219,71,229,165,156,119,10,166,32,104,254,127,193,173],Y0=[1,2,3,5],dl=function(e,t){return e<>16-t},yl=function(e,t){return(e&65535)>>t|e<<16-t&65535};$0.exports=Yt.rc2=Yt.rc2||{};Yt.rc2.expandKey=function(e,t){typeof e=="string"&&(e=Yt.util.createBuffer(e)),t=t||128;var r=e,n=e.length(),i=t,s=Math.ceil(i/8),o=255>>(i&7),a;for(a=n;a<128;a++)r.putByte(Fs[r.at(a-1)+r.at(a-n)&255]);for(r.setAt(128-s,Fs[r.at(128-s)&o]),a=127-s;a>=0;a--)r.setAt(a,Fs[r.at(a+1)^r.at(a+s)]);return r};var W0=function(e,t,r){var n=!1,i=null,s=null,o=null,a,c,f,u,h=[];for(e=Yt.rc2.expandKey(e,t),f=0;f<64;f++)h.push(e.getInt16Le());r?(a=function(p){for(f=0;f<4;f++)p[f]+=h[u]+(p[(f+3)%4]&p[(f+2)%4])+(~p[(f+3)%4]&p[(f+1)%4]),p[f]=dl(p[f],Y0[f]),u++},c=function(p){for(f=0;f<4;f++)p[f]+=h[p[(f+3)%4]&63]}):(a=function(p){for(f=3;f>=0;f--)p[f]=yl(p[f],Y0[f]),p[f]-=h[u]+(p[(f+3)%4]&p[(f+2)%4])+(~p[(f+3)%4]&p[(f+1)%4]),u--},c=function(p){for(f=3;f>=0;f--)p[f]-=h[p[(f+3)%4]&63]});var l=function(p){var d=[];for(f=0;f<4;f++){var y=i.getInt16Le();o!==null&&(r?y^=o.getInt16Le():o.putInt16Le(y)),d.push(y&65535)}u=r?0:63;for(var g=0;g=8;)l([[5,a],[1,c],[6,a],[1,c],[5,a]])},finish:function(p){var d=!0;if(r)if(p)d=p(8,i,!r);else{var y=i.length()===8?8:8-i.length();i.fillWithByte(y,y)}if(d&&(n=!0,x.update()),!r&&(d=i.length()===0,d))if(p)d=p(8,s,!r);else{var g=s.length(),v=s.at(g-1);v>g?d=!1:s.truncate(v)}return d}},x};Yt.rc2.startEncrypting=function(e,t,r){var n=Yt.rc2.createEncryptionCipher(e,128);return n.start(t,r),n};Yt.rc2.createEncryptionCipher=function(e,t){return W0(e,t,!0)};Yt.rc2.startDecrypting=function(e,t,r){var n=Yt.rc2.createDecryptionCipher(e,128);return n.start(t,r),n};Yt.rc2.createDecryptionCipher=function(e,t){return W0(e,t,!1)}});var wi=pt((o2,nc)=>{var Hs=ht();nc.exports=Hs.jsbn=Hs.jsbn||{};var Ne,xl=0xdeadbeefcafe,X0=(xl&16777215)==15715070;function D(e,t,r){this.data=[],e!=null&&(typeof e=="number"?this.fromNumber(e,t,r):t==null&&typeof e!="string"?this.fromString(e,256):this.fromString(e,t))}Hs.jsbn.BigInteger=D;function ot(){return new D(null)}function gl(e,t,r,n,i,s){for(;--s>=0;){var o=t*this.data[e++]+r.data[n]+i;i=Math.floor(o/67108864),r.data[n++]=o&67108863}return i}function ml(e,t,r,n,i,s){for(var o=t&32767,a=t>>15;--s>=0;){var c=this.data[e]&32767,f=this.data[e++]>>15,u=a*c+f*o;c=o*c+((u&32767)<<15)+r.data[n]+(i&1073741823),i=(c>>>30)+(u>>>15)+a*f+(i>>>30),r.data[n++]=c&1073741823}return i}function Q0(e,t,r,n,i,s){for(var o=t&16383,a=t>>14;--s>=0;){var c=this.data[e]&16383,f=this.data[e++]>>14,u=a*c+f*o;c=o*c+((u&16383)<<14)+r.data[n]+i,i=(c>>28)+(u>>14)+a*f,r.data[n++]=c&268435455}return i}typeof navigator>"u"?(D.prototype.am=Q0,Ne=28):X0&&navigator.appName=="Microsoft Internet Explorer"?(D.prototype.am=ml,Ne=30):X0&&navigator.appName!="Netscape"?(D.prototype.am=gl,Ne=26):(D.prototype.am=Q0,Ne=28);D.prototype.DB=Ne;D.prototype.DM=(1<=0;--t)e.data[t]=this.data[t];e.t=this.t,e.s=this.s}function wl(e){this.t=1,this.s=e<0?-1:0,e>0?this.data[0]=e:e<-1?this.data[0]=e+this.DV:this.t=0}function Ge(e){var t=ot();return t.fromInt(e),t}function El(e,t){var r;if(t==16)r=4;else if(t==8)r=3;else if(t==256)r=8;else if(t==2)r=1;else if(t==32)r=5;else if(t==4)r=2;else{this.fromRadix(e,t);return}this.t=0,this.s=0;for(var n=e.length,i=!1,s=0;--n>=0;){var o=r==8?e[n]&255:j0(e,n);if(o<0){e.charAt(n)=="-"&&(i=!0);continue}i=!1,s==0?this.data[this.t++]=o:s+r>this.DB?(this.data[this.t-1]|=(o&(1<>this.DB-s):this.data[this.t-1]|=o<=this.DB&&(s-=this.DB)}r==8&&e[0]&128&&(this.s=-1,s>0&&(this.data[this.t-1]|=(1<0&&this.data[this.t-1]==e;)--this.t}function Bl(e){if(this.s<0)return"-"+this.negate().toString(e);var t;if(e==16)t=4;else if(e==8)t=3;else if(e==2)t=1;else if(e==32)t=5;else if(e==4)t=2;else return this.toRadix(e);var r=(1<0)for(a>a)>0&&(i=!0,s=J0(n));o>=0;)a>(a+=this.DB-t)):(n=this.data[o]>>(a-=t)&r,a<=0&&(a+=this.DB,--o)),n>0&&(i=!0),i&&(s+=J0(n));return i?s:"0"}function Al(){var e=ot();return D.ZERO.subTo(this,e),e}function Cl(){return this.s<0?this.negate():this}function Il(e){var t=this.s-e.s;if(t!=0)return t;var r=this.t;if(t=r-e.t,t!=0)return this.s<0?-t:t;for(;--r>=0;)if((t=this.data[r]-e.data[r])!=0)return t;return 0}function vi(e){var t=1,r;return(r=e>>>16)!=0&&(e=r,t+=16),(r=e>>8)!=0&&(e=r,t+=8),(r=e>>4)!=0&&(e=r,t+=4),(r=e>>2)!=0&&(e=r,t+=2),(r=e>>1)!=0&&(e=r,t+=1),t}function Tl(){return this.t<=0?0:this.DB*(this.t-1)+vi(this.data[this.t-1]^this.s&this.DM)}function _l(e,t){var r;for(r=this.t-1;r>=0;--r)t.data[r+e]=this.data[r];for(r=e-1;r>=0;--r)t.data[r]=0;t.t=this.t+e,t.s=this.s}function Ll(e,t){for(var r=e;r=0;--a)t.data[a+s+1]=this.data[a]>>n|o,o=(this.data[a]&i)<=0;--a)t.data[a]=0;t.data[s]=o,t.t=this.t+s+1,t.s=this.s,t.clamp()}function Nl(e,t){t.s=this.s;var r=Math.floor(e/this.DB);if(r>=this.t){t.t=0;return}var n=e%this.DB,i=this.DB-n,s=(1<>n;for(var o=r+1;o>n;n>0&&(t.data[this.t-r-1]|=(this.s&s)<>=this.DB;if(e.t>=this.DB;n+=this.s}else{for(n+=this.s;r>=this.DB;n-=e.s}t.s=n<0?-1:0,n<-1?t.data[r++]=this.DV+n:n>0&&(t.data[r++]=n),t.t=r,t.clamp()}function Pl(e,t){var r=this.abs(),n=e.abs(),i=r.t;for(t.t=i+n.t;--i>=0;)t.data[i]=0;for(i=0;i=0;)e.data[r]=0;for(r=0;r=t.DV&&(e.data[r+t.t]-=t.DV,e.data[r+t.t+1]=1)}e.t>0&&(e.data[e.t-1]+=t.am(r,t.data[r],e,2*r,0,1)),e.s=0,e.clamp()}function Ul(e,t,r){var n=e.abs();if(!(n.t<=0)){var i=this.abs();if(i.t0?(n.lShiftTo(c,s),i.lShiftTo(c,r)):(n.copyTo(s),i.copyTo(r));var f=s.t,u=s.data[f-1];if(u!=0){var h=u*(1<1?s.data[f-2]>>this.F2:0),l=this.FV/h,x=(1<=0&&(r.data[r.t++]=1,r.subTo(g,r)),D.ONE.dlShiftTo(f,g),g.subTo(s,s);s.t=0;){var v=r.data[--d]==u?this.DM:Math.floor(r.data[d]*l+(r.data[d-1]+p)*x);if((r.data[d]+=s.am(0,v,r,y,0,f))0&&r.rShiftTo(c,r),o<0&&D.ZERO.subTo(r,r)}}}function Kl(e){var t=ot();return this.abs().divRemTo(e,null,t),this.s<0&&t.compareTo(D.ZERO)>0&&e.subTo(t,t),t}function sr(e){this.m=e}function Ol(e){return e.s<0||e.compareTo(this.m)>=0?e.mod(this.m):e}function Ml(e){return e}function Vl(e){e.divRemTo(this.m,null,e)}function Fl(e,t,r){e.multiplyTo(t,r),this.reduce(r)}function Hl(e,t){e.squareTo(t),this.reduce(t)}sr.prototype.convert=Ol;sr.prototype.revert=Ml;sr.prototype.reduce=Vl;sr.prototype.mulTo=Fl;sr.prototype.sqrTo=Hl;function ql(){if(this.t<1)return 0;var e=this.data[0];if(!(e&1))return 0;var t=e&3;return t=t*(2-(e&15)*t)&15,t=t*(2-(e&255)*t)&255,t=t*(2-((e&65535)*t&65535))&65535,t=t*(2-e*t%this.DV)%this.DV,t>0?this.DV-t:-t}function or(e){this.m=e,this.mp=e.invDigit(),this.mpl=this.mp&32767,this.mph=this.mp>>15,this.um=(1<0&&this.m.subTo(t,t),t}function Gl(e){var t=ot();return e.copyTo(t),this.reduce(t),t}function Yl(e){for(;e.t<=this.mt2;)e.data[e.t++]=0;for(var t=0;t>15)*this.mpl&this.um)<<15)&e.DM;for(r=t+this.m.t,e.data[r]+=this.m.am(0,n,e,t,0,this.m.t);e.data[r]>=e.DV;)e.data[r]-=e.DV,e.data[++r]++}e.clamp(),e.drShiftTo(this.m.t,e),e.compareTo(this.m)>=0&&e.subTo(this.m,e)}function Wl(e,t){e.squareTo(t),this.reduce(t)}function $l(e,t,r){e.multiplyTo(t,r),this.reduce(r)}or.prototype.convert=zl;or.prototype.revert=Gl;or.prototype.reduce=Yl;or.prototype.mulTo=$l;or.prototype.sqrTo=Wl;function Zl(){return(this.t>0?this.data[0]&1:this.s)==0}function Xl(e,t){if(e>4294967295||e<1)return D.ONE;var r=ot(),n=ot(),i=t.convert(this),s=vi(e)-1;for(i.copyTo(r);--s>=0;)if(t.sqrTo(r,n),(e&1<0)t.mulTo(n,i,r);else{var o=r;r=n,n=o}return t.revert(r)}function Ql(e,t){var r;return e<256||t.isEven()?r=new sr(t):r=new or(t),this.exp(e,r)}D.prototype.copyTo=vl;D.prototype.fromInt=wl;D.prototype.fromString=El;D.prototype.clamp=Sl;D.prototype.dlShiftTo=_l;D.prototype.drShiftTo=Ll;D.prototype.lShiftTo=Rl;D.prototype.rShiftTo=Nl;D.prototype.subTo=Dl;D.prototype.multiplyTo=Pl;D.prototype.squareTo=kl;D.prototype.divRemTo=Ul;D.prototype.invDigit=ql;D.prototype.isEven=Zl;D.prototype.exp=Xl;D.prototype.toString=Bl;D.prototype.negate=Al;D.prototype.abs=Cl;D.prototype.compareTo=Il;D.prototype.bitLength=Tl;D.prototype.mod=Kl;D.prototype.modPowInt=Ql;D.ZERO=Ge(0);D.ONE=Ge(1);function Jl(){var e=ot();return this.copyTo(e),e}function jl(){if(this.s<0){if(this.t==1)return this.data[0]-this.DV;if(this.t==0)return-1}else{if(this.t==1)return this.data[0];if(this.t==0)return 0}return(this.data[1]&(1<<32-this.DB)-1)<>24}function ep(){return this.t==0?this.s:this.data[0]<<16>>16}function rp(e){return Math.floor(Math.LN2*this.DB/Math.log(e))}function np(){return this.s<0?-1:this.t<=0||this.t==1&&this.data[0]<=0?0:1}function ip(e){if(e==null&&(e=10),this.signum()==0||e<2||e>36)return"0";var t=this.chunkSize(e),r=Math.pow(e,t),n=Ge(r),i=ot(),s=ot(),o="";for(this.divRemTo(n,i,s);i.signum()>0;)o=(r+s.intValue()).toString(e).substr(1)+o,i.divRemTo(n,i,s);return s.intValue().toString(e)+o}function sp(e,t){this.fromInt(0),t==null&&(t=10);for(var r=this.chunkSize(t),n=Math.pow(t,r),i=!1,s=0,o=0,a=0;a=r&&(this.dMultiply(n),this.dAddOffset(o,0),s=0,o=0)}s>0&&(this.dMultiply(Math.pow(t,s)),this.dAddOffset(o,0)),i&&D.ZERO.subTo(this,this)}function op(e,t,r){if(typeof t=="number")if(e<2)this.fromInt(1);else for(this.fromNumber(e,r),this.testBit(e-1)||this.bitwiseTo(D.ONE.shiftLeft(e-1),zs,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(t);)this.dAddOffset(2,0),this.bitLength()>e&&this.subTo(D.ONE.shiftLeft(e-1),this);else{var n=new Array,i=e&7;n.length=(e>>3)+1,t.nextBytes(n),i>0?n[0]&=(1<0)for(r>r)!=(this.s&this.DM)>>r&&(t[i++]=n|this.s<=0;)r<8?(n=(this.data[e]&(1<>(r+=this.DB-8)):(n=this.data[e]>>(r-=8)&255,r<=0&&(r+=this.DB,--e)),n&128&&(n|=-256),i==0&&(this.s&128)!=(n&128)&&++i,(i>0||n!=this.s)&&(t[i++]=n);return t}function cp(e){return this.compareTo(e)==0}function fp(e){return this.compareTo(e)<0?this:e}function up(e){return this.compareTo(e)>0?this:e}function hp(e,t,r){var n,i,s=Math.min(e.t,this.t);for(n=0;n>=16,t+=16),e&255||(e>>=8,t+=8),e&15||(e>>=4,t+=4),e&3||(e>>=2,t+=2),e&1||++t,t}function wp(){for(var e=0;e=this.t?this.s!=0:(this.data[t]&1<>=this.DB;if(e.t>=this.DB;n+=this.s}else{for(n+=this.s;r>=this.DB;n+=e.s}t.s=n<0?-1:0,n>0?t.data[r++]=n:n<-1&&(t.data[r++]=this.DV+n),t.t=r,t.clamp()}function Lp(e){var t=ot();return this.addTo(e,t),t}function Rp(e){var t=ot();return this.subTo(e,t),t}function Np(e){var t=ot();return this.multiplyTo(e,t),t}function Dp(e){var t=ot();return this.divRemTo(e,t,null),t}function Pp(e){var t=ot();return this.divRemTo(e,null,t),t}function kp(e){var t=ot(),r=ot();return this.divRemTo(e,t,r),new Array(t,r)}function Up(e){this.data[this.t]=this.am(0,e-1,this,0,0,this.t),++this.t,this.clamp()}function Kp(e,t){if(e!=0){for(;this.t<=t;)this.data[this.t++]=0;for(this.data[t]+=e;this.data[t]>=this.DV;)this.data[t]-=this.DV,++t>=this.t&&(this.data[this.t++]=0),++this.data[t]}}function dn(){}function rc(e){return e}function Op(e,t,r){e.multiplyTo(t,r)}function Mp(e,t){e.squareTo(t)}dn.prototype.convert=rc;dn.prototype.revert=rc;dn.prototype.mulTo=Op;dn.prototype.sqrTo=Mp;function Vp(e){return this.exp(e,new dn)}function Fp(e,t,r){var n=Math.min(this.t+e.t,t);for(r.s=0,r.t=n;n>0;)r.data[--n]=0;var i;for(i=r.t-this.t;n=0;)r.data[n]=0;for(n=Math.max(t-this.t,0);n2*this.m.t)return e.mod(this.m);if(e.compareTo(this.m)<0)return e;var t=ot();return e.copyTo(t),this.reduce(t),t}function zp(e){return e}function Gp(e){for(e.drShiftTo(this.m.t-1,this.r2),e.t>this.m.t+1&&(e.t=this.m.t+1,e.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);e.compareTo(this.r2)<0;)e.dAddOffset(1,this.m.t+1);for(e.subTo(this.r2,e);e.compareTo(this.m)>=0;)e.subTo(this.m,e)}function Yp(e,t){e.squareTo(t),this.reduce(t)}function Wp(e,t,r){e.multiplyTo(t,r),this.reduce(r)}Pr.prototype.convert=qp;Pr.prototype.revert=zp;Pr.prototype.reduce=Gp;Pr.prototype.mulTo=Wp;Pr.prototype.sqrTo=Yp;function $p(e,t){var r=e.bitLength(),n,i=Ge(1),s;if(r<=0)return i;r<18?n=1:r<48?n=3:r<144?n=4:r<768?n=5:n=6,r<8?s=new sr(t):t.isEven()?s=new Pr(t):s=new or(t);var o=new Array,a=3,c=n-1,f=(1<1){var u=ot();for(s.sqrTo(o[1],u);a<=f;)o[a]=ot(),s.mulTo(u,o[a-2],o[a]),a+=2}var h=e.t-1,l,x=!0,p=ot(),d;for(r=vi(e.data[h])-1;h>=0;){for(r>=c?l=e.data[h]>>r-c&f:(l=(e.data[h]&(1<0&&(l|=e.data[h-1]>>this.DB+r-c)),a=n;!(l&1);)l>>=1,--a;if((r-=a)<0&&(r+=this.DB,--h),x)o[l].copyTo(i),x=!1;else{for(;a>1;)s.sqrTo(i,p),s.sqrTo(p,i),a-=2;a>0?s.sqrTo(i,p):(d=i,i=p,p=d),s.mulTo(p,o[l],i)}for(;h>=0&&!(e.data[h]&1<0&&(t.rShiftTo(s,t),r.rShiftTo(s,r));t.signum()>0;)(i=t.getLowestSetBit())>0&&t.rShiftTo(i,t),(i=r.getLowestSetBit())>0&&r.rShiftTo(i,r),t.compareTo(r)>=0?(t.subTo(r,t),t.rShiftTo(1,t)):(r.subTo(t,r),r.rShiftTo(1,r));return s>0&&r.lShiftTo(s,r),r}function Xp(e){if(e<=0)return 0;var t=this.DV%e,r=this.s<0?e-1:0;if(this.t>0)if(t==0)r=this.data[0]%e;else for(var n=this.t-1;n>=0;--n)r=(t*r+this.data[n])%e;return r}function Qp(e){var t=e.isEven();if(this.isEven()&&t||e.signum()==0)return D.ZERO;for(var r=e.clone(),n=this.clone(),i=Ge(1),s=Ge(0),o=Ge(0),a=Ge(1);r.signum()!=0;){for(;r.isEven();)r.rShiftTo(1,r),t?((!i.isEven()||!s.isEven())&&(i.addTo(this,i),s.subTo(e,s)),i.rShiftTo(1,i)):s.isEven()||s.subTo(e,s),s.rShiftTo(1,s);for(;n.isEven();)n.rShiftTo(1,n),t?((!o.isEven()||!a.isEven())&&(o.addTo(this,o),a.subTo(e,a)),o.rShiftTo(1,o)):a.isEven()||a.subTo(e,a),a.rShiftTo(1,a);r.compareTo(n)>=0?(r.subTo(n,r),t&&i.subTo(o,i),s.subTo(a,s)):(n.subTo(r,n),t&&o.subTo(i,o),a.subTo(s,a))}if(n.compareTo(D.ONE)!=0)return D.ZERO;if(a.compareTo(e)>=0)return a.subtract(e);if(a.signum()<0)a.addTo(e,a);else return a;return a.signum()<0?a.add(e):a}var ce=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509],Jp=(1<<26)/ce[ce.length-1];function jp(e){var t,r=this.abs();if(r.t==1&&r.data[0]<=ce[ce.length-1]){for(t=0;t=0);var a=s.modPow(n,this);if(a.compareTo(D.ONE)!=0&&a.compareTo(t)!=0){for(var c=1;c++{var ye=ht();ir();Ct();var sc=ac.exports=ye.sha1=ye.sha1||{};ye.md.sha1=ye.md.algorithms.sha1=sc;sc.create=function(){oc||rd();var e=null,t=ye.util.createBuffer(),r=new Array(80),n={algorithm:"sha1",blockLength:64,digestLength:20,messageLength:0,fullMessageLength:null,messageLengthSize:8};return n.start=function(){n.messageLength=0,n.fullMessageLength=n.messageLength64=[];for(var i=n.messageLengthSize/4,s=0;s>>0,o>>>0];for(var a=n.fullMessageLength.length-1;a>=0;--a)n.fullMessageLength[a]+=o[1],o[1]=o[0]+(n.fullMessageLength[a]/4294967296>>>0),n.fullMessageLength[a]=n.fullMessageLength[a]>>>0,o[0]=o[1]/4294967296>>>0;return t.putBytes(i),ic(e,r,t),(t.read>2048||t.length()===0)&&t.compact(),n},n.digest=function(){var i=ye.util.createBuffer();i.putBytes(t.bytes());var s=n.fullMessageLength[n.fullMessageLength.length-1]+n.messageLengthSize,o=s&n.blockLength-1;i.putBytes(Gs.substr(0,n.blockLength-o));for(var a,c,f=n.fullMessageLength[0]*8,u=0;u>>0,f+=c,i.putInt32(f>>>0),f=a>>>0;i.putInt32(f);var h={h0:e.h0,h1:e.h1,h2:e.h2,h3:e.h3,h4:e.h4};ic(h,r,i);var l=ye.util.createBuffer();return l.putInt32(h.h0),l.putInt32(h.h1),l.putInt32(h.h2),l.putInt32(h.h3),l.putInt32(h.h4),l},n};var Gs=null,oc=!1;function rd(){Gs="\x80",Gs+=ye.util.fillString("\0",64),oc=!0}function ic(e,t,r){for(var n,i,s,o,a,c,f,u,h=r.length();h>=64;){for(i=e.h0,s=e.h1,o=e.h2,a=e.h3,c=e.h4,u=0;u<16;++u)n=r.getInt32(),t[u]=n,f=a^s&(o^a),n=(i<<5|i>>>27)+f+c+1518500249+n,c=a,a=o,o=(s<<30|s>>>2)>>>0,s=i,i=n;for(;u<20;++u)n=t[u-3]^t[u-8]^t[u-14]^t[u-16],n=n<<1|n>>>31,t[u]=n,f=a^s&(o^a),n=(i<<5|i>>>27)+f+c+1518500249+n,c=a,a=o,o=(s<<30|s>>>2)>>>0,s=i,i=n;for(;u<32;++u)n=t[u-3]^t[u-8]^t[u-14]^t[u-16],n=n<<1|n>>>31,t[u]=n,f=s^o^a,n=(i<<5|i>>>27)+f+c+1859775393+n,c=a,a=o,o=(s<<30|s>>>2)>>>0,s=i,i=n;for(;u<40;++u)n=t[u-6]^t[u-16]^t[u-28]^t[u-32],n=n<<2|n>>>30,t[u]=n,f=s^o^a,n=(i<<5|i>>>27)+f+c+1859775393+n,c=a,a=o,o=(s<<30|s>>>2)>>>0,s=i,i=n;for(;u<60;++u)n=t[u-6]^t[u-16]^t[u-28]^t[u-32],n=n<<2|n>>>30,t[u]=n,f=s&o|a&(s^o),n=(i<<5|i>>>27)+f+c+2400959708+n,c=a,a=o,o=(s<<30|s>>>2)>>>0,s=i,i=n;for(;u<80;++u)n=t[u-6]^t[u-16]^t[u-28]^t[u-32],n=n<<2|n>>>30,t[u]=n,f=s^o^a,n=(i<<5|i>>>27)+f+c+3395469782+n,c=a,a=o,o=(s<<30|s>>>2)>>>0,s=i,i=n;e.h0=e.h0+i|0,e.h1=e.h1+s|0,e.h2=e.h2+o|0,e.h3=e.h3+a|0,e.h4=e.h4+c|0,h-=64}}});var hc=pt((c2,uc)=>{var xe=ht();Ct();pn();cc();var fc=uc.exports=xe.pkcs1=xe.pkcs1||{};fc.encode_rsa_oaep=function(e,t,r){var n,i,s,o;typeof r=="string"?(n=r,i=arguments[3]||void 0,s=arguments[4]||void 0):r&&(n=r.label||void 0,i=r.seed||void 0,s=r.md||void 0,r.mgf1&&r.mgf1.md&&(o=r.mgf1.md)),s?s.start():s=xe.md.sha1.create(),o||(o=s);var a=Math.ceil(e.n.bitLength()/8),c=a-2*s.digestLength-2;if(t.length>c){var f=new Error("RSAES-OAEP input message length is too long.");throw f.length=t.length,f.maxLength=c,f}n||(n=""),s.update(n,"raw");for(var u=s.digest(),h="",l=c-t.length,x=0;x>24&255,s>>16&255,s>>8&255,s&255);r.start(),r.update(e+o),n+=r.digest().getBytes()}return n.substring(0,t)}});var lc=pt((f2,Ys)=>{var Ye=ht();Ct();wi();pn();(function(){if(Ye.prime){Ys.exports=Ye.prime;return}var e=Ys.exports=Ye.prime=Ye.prime||{},t=Ye.jsbn.BigInteger,r=[6,4,2,4,2,4,6,2],n=new t(null);n.fromInt(30);var i=function(h,l){return h|l};e.generateProbablePrime=function(h,l,x){typeof l=="function"&&(x=l,l={}),l=l||{};var p=l.algorithm||"PRIMEINC";typeof p=="string"&&(p={name:p}),p.options=p.options||{};var d=l.prng||Ye.random,y={nextBytes:function(g){for(var v=d.getBytesSync(g.length),m=0;ml&&(h=f(l,x)),h.isProbablePrime(d))return g(null,h);h.dAddOffset(r[p++%8],0)}while(y<0||+new Date-v"u")return o(h,l,x,p);var d=f(h,l),y=x.workers,g=x.workLoad||100,v=g*30/8,m=x.workerScript||"forge/prime.worker.js";if(y===-1)return Ye.util.estimateCores(function(S,B){S&&(B=2),y=B-1,C()});C();function C(){y=Math.max(1,y);for(var S=[],B=0;Bh&&(d=f(h,l));var z=d.toString(16);M.target.postMessage({hex:z,workLoad:g}),d.dAddOffset(v,0)}}}}function f(h,l){var x=new t(h,l),p=h-1;return x.testBit(p)||x.bitwiseTo(t.ONE.shiftLeft(p),i,x),x.dAddOffset(31-x.mod(n).byteValue(),0),x}function u(h){return h<=100?27:h<=150?18:h<=200?15:h<=250?12:h<=300?9:h<=350?8:h<=400?7:h<=500?6:h<=600?5:h<=800?4:h<=1250?3:2}})()});var Bi=pt((u2,bc)=>{var Y=ht();ln();wi();ci();hc();lc();pn();Ct();typeof st>"u"&&(st=Y.jsbn.BigInteger);var st,Ws=Y.util.isNodejs?yi():null,E=Y.asn1,te=Y.util;Y.pki=Y.pki||{};bc.exports=Y.pki.rsa=Y.rsa=Y.rsa||{};var Q=Y.pki,nd=[6,4,2,4,2,4,6,2],id={name:"PrivateKeyInfo",tagClass:E.Class.UNIVERSAL,type:E.Type.SEQUENCE,constructed:!0,value:[{name:"PrivateKeyInfo.version",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"privateKeyVersion"},{name:"PrivateKeyInfo.privateKeyAlgorithm",tagClass:E.Class.UNIVERSAL,type:E.Type.SEQUENCE,constructed:!0,value:[{name:"AlgorithmIdentifier.algorithm",tagClass:E.Class.UNIVERSAL,type:E.Type.OID,constructed:!1,capture:"privateKeyOid"}]},{name:"PrivateKeyInfo",tagClass:E.Class.UNIVERSAL,type:E.Type.OCTETSTRING,constructed:!1,capture:"privateKey"}]},sd={name:"RSAPrivateKey",tagClass:E.Class.UNIVERSAL,type:E.Type.SEQUENCE,constructed:!0,value:[{name:"RSAPrivateKey.version",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"privateKeyVersion"},{name:"RSAPrivateKey.modulus",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"privateKeyModulus"},{name:"RSAPrivateKey.publicExponent",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"privateKeyPublicExponent"},{name:"RSAPrivateKey.privateExponent",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"privateKeyPrivateExponent"},{name:"RSAPrivateKey.prime1",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"privateKeyPrime1"},{name:"RSAPrivateKey.prime2",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"privateKeyPrime2"},{name:"RSAPrivateKey.exponent1",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"privateKeyExponent1"},{name:"RSAPrivateKey.exponent2",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"privateKeyExponent2"},{name:"RSAPrivateKey.coefficient",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"privateKeyCoefficient"}]},od={name:"RSAPublicKey",tagClass:E.Class.UNIVERSAL,type:E.Type.SEQUENCE,constructed:!0,value:[{name:"RSAPublicKey.modulus",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"publicKeyModulus"},{name:"RSAPublicKey.exponent",tagClass:E.Class.UNIVERSAL,type:E.Type.INTEGER,constructed:!1,capture:"publicKeyExponent"}]},ad=Y.pki.rsa.publicKeyValidator={name:"SubjectPublicKeyInfo",tagClass:E.Class.UNIVERSAL,type:E.Type.SEQUENCE,constructed:!0,captureAsn1:"subjectPublicKeyInfo",value:[{name:"SubjectPublicKeyInfo.AlgorithmIdentifier",tagClass:E.Class.UNIVERSAL,type:E.Type.SEQUENCE,constructed:!0,value:[{name:"AlgorithmIdentifier.algorithm",tagClass:E.Class.UNIVERSAL,type:E.Type.OID,constructed:!1,capture:"publicKeyOid"}]},{name:"SubjectPublicKeyInfo.subjectPublicKey",tagClass:E.Class.UNIVERSAL,type:E.Type.BITSTRING,constructed:!1,value:[{name:"SubjectPublicKeyInfo.subjectPublicKey.RSAPublicKey",tagClass:E.Class.UNIVERSAL,type:E.Type.SEQUENCE,constructed:!0,optional:!0,captureAsn1:"rsaPublicKey"}]}]},cd={name:"DigestInfo",tagClass:E.Class.UNIVERSAL,type:E.Type.SEQUENCE,constructed:!0,value:[{name:"DigestInfo.DigestAlgorithm",tagClass:E.Class.UNIVERSAL,type:E.Type.SEQUENCE,constructed:!0,value:[{name:"DigestInfo.DigestAlgorithm.algorithmIdentifier",tagClass:E.Class.UNIVERSAL,type:E.Type.OID,constructed:!1,capture:"algorithmIdentifier"},{name:"DigestInfo.DigestAlgorithm.parameters",tagClass:E.Class.UNIVERSAL,type:E.Type.NULL,capture:"parameters",optional:!0,constructed:!1}]},{name:"DigestInfo.digest",tagClass:E.Class.UNIVERSAL,type:E.Type.OCTETSTRING,constructed:!1,capture:"digest"}]},fd=function(e){var t;if(e.algorithm in Q.oids)t=Q.oids[e.algorithm];else{var r=new Error("Unknown message digest algorithm.");throw r.algorithm=e.algorithm,r}var n=E.oidToDer(t).getBytes(),i=E.create(E.Class.UNIVERSAL,E.Type.SEQUENCE,!0,[]),s=E.create(E.Class.UNIVERSAL,E.Type.SEQUENCE,!0,[]);s.value.push(E.create(E.Class.UNIVERSAL,E.Type.OID,!1,n)),s.value.push(E.create(E.Class.UNIVERSAL,E.Type.NULL,!1,""));var o=E.create(E.Class.UNIVERSAL,E.Type.OCTETSTRING,!1,e.digest().getBytes());return i.value.push(s),i.value.push(o),E.toDer(i).getBytes()},gc=function(e,t,r){if(r)return e.modPow(t.e,t.n);if(!t.p||!t.q)return e.modPow(t.d,t.n);t.dP||(t.dP=t.d.mod(t.p.subtract(st.ONE))),t.dQ||(t.dQ=t.d.mod(t.q.subtract(st.ONE))),t.qInv||(t.qInv=t.q.modInverse(t.p));var n;do n=new st(Y.util.bytesToHex(Y.random.getBytes(t.n.bitLength()/8)),16);while(n.compareTo(t.n)>=0||!n.gcd(t.n).equals(st.ONE));e=e.multiply(n.modPow(t.e,t.n)).mod(t.n);for(var i=e.mod(t.p).modPow(t.dP,t.p),s=e.mod(t.q).modPow(t.dQ,t.q);i.compareTo(s)<0;)i=i.add(t.p);var o=i.subtract(s).multiply(t.qInv).mod(t.p).multiply(t.q).add(s);return o=o.multiply(n.modInverse(t.n)).mod(t.n),o};Q.rsa.encrypt=function(e,t,r){var n=r,i,s=Math.ceil(t.n.bitLength()/8);r!==!1&&r!==!0?(n=r===2,i=mc(e,t,r)):(i=Y.util.createBuffer(),i.putBytes(e));for(var o=new st(i.toHex(),16),a=gc(o,t,n),c=a.toString(16),f=Y.util.createBuffer(),u=s-Math.ceil(c.length/2);u>0;)f.putByte(0),--u;return f.putBytes(Y.util.hexToBytes(c)),f.getBytes()};Q.rsa.decrypt=function(e,t,r,n){var i=Math.ceil(t.n.bitLength()/8);if(e.length!==i){var s=new Error("Encrypted message length is invalid.");throw s.length=e.length,s.expected=i,s}var o=new st(Y.util.createBuffer(e).toHex(),16);if(o.compareTo(t.n)>=0)throw new Error("Encrypted message is invalid.");for(var a=gc(o,t,r),c=a.toString(16),f=Y.util.createBuffer(),u=i-Math.ceil(c.length/2);u>0;)f.putByte(0),--u;return f.putBytes(Y.util.hexToBytes(c)),n!==!1?Si(f.getBytes(),t,r):f.getBytes()};Q.rsa.createKeyPairGenerationState=function(e,t,r){typeof e=="string"&&(e=parseInt(e,10)),e=e||2048,r=r||{};var n=r.prng||Y.random,i={nextBytes:function(a){for(var c=n.getBytesSync(a.length),f=0;f>1,pBits:e-(e>>1),pqState:0,num:null,keys:null},o.e.fromInt(o.eInt);else throw new Error("Invalid key generation algorithm: "+s);return o};Q.rsa.stepKeyPairGenerationState=function(e,t){"algorithm"in e||(e.algorithm="PRIMEINC");var r=new st(null);r.fromInt(30);for(var n=0,i=function(h,l){return h|l},s=+new Date,o,a=0;e.keys===null&&(t<=0||ac?e.pqState=0:e.num.isProbablePrime(hd(e.num.bitLength()))?++e.pqState:e.num.dAddOffset(nd[n++%8],0):e.pqState===2?e.pqState=e.num.subtract(st.ONE).gcd(e.e).compareTo(st.ONE)===0?3:0:e.pqState===3&&(e.pqState=0,e.p===null?e.p=e.num:e.q=e.num,e.p!==null&&e.q!==null&&++e.state,e.num=null)}else if(e.state===1)e.p.compareTo(e.q)<0&&(e.num=e.p,e.p=e.q,e.q=e.num),++e.state;else if(e.state===2)e.p1=e.p.subtract(st.ONE),e.q1=e.q.subtract(st.ONE),e.phi=e.p1.multiply(e.q1),++e.state;else if(e.state===3)e.phi.gcd(e.e).compareTo(st.ONE)===0?++e.state:(e.p=null,e.q=null,e.state=0);else if(e.state===4)e.n=e.p.multiply(e.q),e.n.bitLength()===e.bits?++e.state:(e.q=null,e.state=0);else if(e.state===5){var u=e.e.modInverse(e.phi);e.keys={privateKey:Q.rsa.setPrivateKey(e.n,e.e,u,e.p,e.q,u.mod(e.p1),u.mod(e.q1),e.q.modInverse(e.p)),publicKey:Q.rsa.setPublicKey(e.n,e.e)}}o=+new Date,a+=o-s,s=o}return e.keys!==null};Q.rsa.generateKeyPair=function(e,t,r,n){if(arguments.length===1?typeof e=="object"?(r=e,e=void 0):typeof e=="function"&&(n=e,e=void 0):arguments.length===2?typeof e=="number"?typeof t=="function"?(n=t,t=void 0):typeof t!="number"&&(r=t,t=void 0):(r=e,n=t,e=void 0,t=void 0):arguments.length===3&&(typeof t=="number"?typeof r=="function"&&(n=r,r=void 0):(n=r,r=t,t=void 0)),r=r||{},e===void 0&&(e=r.bits||2048),t===void 0&&(t=r.e||65537),!Y.options.usePureJavaScript&&!r.prng&&e>=256&&e<=16384&&(t===65537||t===3)){if(n){if(pc("generateKeyPair"))return Ws.generateKeyPair("rsa",{modulusLength:e,publicExponent:t,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}},function(a,c,f){if(a)return n(a);n(null,{privateKey:Q.privateKeyFromPem(f),publicKey:Q.publicKeyFromPem(c)})});if(dc("generateKey")&&dc("exportKey"))return te.globalScope.crypto.subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:e,publicExponent:xc(t),hash:{name:"SHA-256"}},!0,["sign","verify"]).then(function(a){return te.globalScope.crypto.subtle.exportKey("pkcs8",a.privateKey)}).then(void 0,function(a){n(a)}).then(function(a){if(a){var c=Q.privateKeyFromAsn1(E.fromDer(Y.util.createBuffer(a)));n(null,{privateKey:c,publicKey:Q.setRsaPublicKey(c.n,c.e)})}});if(yc("generateKey")&&yc("exportKey")){var i=te.globalScope.msCrypto.subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:e,publicExponent:xc(t),hash:{name:"SHA-256"}},!0,["sign","verify"]);i.oncomplete=function(a){var c=a.target.result,f=te.globalScope.msCrypto.subtle.exportKey("pkcs8",c.privateKey);f.oncomplete=function(u){var h=u.target.result,l=Q.privateKeyFromAsn1(E.fromDer(Y.util.createBuffer(h)));n(null,{privateKey:l,publicKey:Q.setRsaPublicKey(l.n,l.e)})},f.onerror=function(u){n(u)}},i.onerror=function(a){n(a)};return}}else if(pc("generateKeyPairSync")){var s=Ws.generateKeyPairSync("rsa",{modulusLength:e,publicExponent:t,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{privateKey:Q.privateKeyFromPem(s.privateKey),publicKey:Q.publicKeyFromPem(s.publicKey)}}}var o=Q.rsa.createKeyPairGenerationState(e,t,r);if(!n)return Q.rsa.stepKeyPairGenerationState(o,0),o.keys;ud(o,r,n)};Q.setRsaPublicKey=Q.rsa.setPublicKey=function(e,t){var r={n:e,e:t};return r.encrypt=function(n,i,s){if(typeof i=="string"?i=i.toUpperCase():i===void 0&&(i="RSAES-PKCS1-V1_5"),i==="RSAES-PKCS1-V1_5")i={encode:function(a,c,f){return mc(a,c,2).getBytes()}};else if(i==="RSA-OAEP"||i==="RSAES-OAEP")i={encode:function(a,c){return Y.pkcs1.encode_rsa_oaep(c,a,s)}};else if(["RAW","NONE","NULL",null].indexOf(i)!==-1)i={encode:function(a){return a}};else if(typeof i=="string")throw new Error('Unsupported encryption scheme: "'+i+'".');var o=i.encode(n,r,!0);return Q.rsa.encrypt(o,r,!0)},r.verify=function(n,i,s,o){typeof s=="string"?s=s.toUpperCase():s===void 0&&(s="RSASSA-PKCS1-V1_5"),o===void 0&&(o={_parseAllDigestBytes:!0}),"_parseAllDigestBytes"in o||(o._parseAllDigestBytes=!0),s==="RSASSA-PKCS1-V1_5"?s={verify:function(c,f){f=Si(f,r,!0);var u=E.fromDer(f,{parseAllBytes:o._parseAllDigestBytes}),h={},l=[];if(!E.validate(u,cd,h,l)){var x=new Error("ASN.1 object does not contain a valid RSASSA-PKCS1-v1_5 DigestInfo value.");throw x.errors=l,x}var p=E.derToOid(h.algorithmIdentifier);if(!(p===Y.oids.md2||p===Y.oids.md5||p===Y.oids.sha1||p===Y.oids.sha224||p===Y.oids.sha256||p===Y.oids.sha384||p===Y.oids.sha512||p===Y.oids["sha512-224"]||p===Y.oids["sha512-256"])){var x=new Error("Unknown RSASSA-PKCS1-v1_5 DigestAlgorithm identifier.");throw x.oid=p,x}if((p===Y.oids.md2||p===Y.oids.md5)&&!("parameters"in h))throw new Error("ASN.1 object does not contain a valid RSASSA-PKCS1-v1_5 DigestInfo value. Missing algorithm identifer NULL parameters.");return c===h.digest}}:(s==="NONE"||s==="NULL"||s===null)&&(s={verify:function(c,f){return f=Si(f,r,!0),c===f}});var a=Q.rsa.decrypt(i,r,!0,!1);return s.verify(n,a,r.n.bitLength())},r};Q.setRsaPrivateKey=Q.rsa.setPrivateKey=function(e,t,r,n,i,s,o,a){var c={n:e,e:t,d:r,p:n,q:i,dP:s,dQ:o,qInv:a};return c.decrypt=function(f,u,h){typeof u=="string"?u=u.toUpperCase():u===void 0&&(u="RSAES-PKCS1-V1_5");var l=Q.rsa.decrypt(f,c,!1,!1);if(u==="RSAES-PKCS1-V1_5")u={decode:Si};else if(u==="RSA-OAEP"||u==="RSAES-OAEP")u={decode:function(x,p){return Y.pkcs1.decode_rsa_oaep(p,x,h)}};else if(["RAW","NONE","NULL",null].indexOf(u)!==-1)u={decode:function(x){return x}};else throw new Error('Unsupported encryption scheme: "'+u+'".');return u.decode(l,c,!1)},c.sign=function(f,u){var h=!1;typeof u=="string"&&(u=u.toUpperCase()),u===void 0||u==="RSASSA-PKCS1-V1_5"?(u={encode:fd},h=1):(u==="NONE"||u==="NULL"||u===null)&&(u={encode:function(){return f}},h=1);var l=u.encode(f,c.n.bitLength());return Q.rsa.encrypt(l,c,h)},c};Q.wrapRsaPrivateKey=function(e){return E.create(E.Class.UNIVERSAL,E.Type.SEQUENCE,!0,[E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,E.integerToDer(0).getBytes()),E.create(E.Class.UNIVERSAL,E.Type.SEQUENCE,!0,[E.create(E.Class.UNIVERSAL,E.Type.OID,!1,E.oidToDer(Q.oids.rsaEncryption).getBytes()),E.create(E.Class.UNIVERSAL,E.Type.NULL,!1,"")]),E.create(E.Class.UNIVERSAL,E.Type.OCTETSTRING,!1,E.toDer(e).getBytes())])};Q.privateKeyFromAsn1=function(e){var t={},r=[];if(E.validate(e,id,t,r)&&(e=E.fromDer(Y.util.createBuffer(t.privateKey))),t={},r=[],!E.validate(e,sd,t,r)){var n=new Error("Cannot read private key. ASN.1 object does not contain an RSAPrivateKey.");throw n.errors=r,n}var i,s,o,a,c,f,u,h;return i=Y.util.createBuffer(t.privateKeyModulus).toHex(),s=Y.util.createBuffer(t.privateKeyPublicExponent).toHex(),o=Y.util.createBuffer(t.privateKeyPrivateExponent).toHex(),a=Y.util.createBuffer(t.privateKeyPrime1).toHex(),c=Y.util.createBuffer(t.privateKeyPrime2).toHex(),f=Y.util.createBuffer(t.privateKeyExponent1).toHex(),u=Y.util.createBuffer(t.privateKeyExponent2).toHex(),h=Y.util.createBuffer(t.privateKeyCoefficient).toHex(),Q.setRsaPrivateKey(new st(i,16),new st(s,16),new st(o,16),new st(a,16),new st(c,16),new st(f,16),new st(u,16),new st(h,16))};Q.privateKeyToAsn1=Q.privateKeyToRSAPrivateKey=function(e){return E.create(E.Class.UNIVERSAL,E.Type.SEQUENCE,!0,[E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,E.integerToDer(0).getBytes()),E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,ge(e.n)),E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,ge(e.e)),E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,ge(e.d)),E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,ge(e.p)),E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,ge(e.q)),E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,ge(e.dP)),E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,ge(e.dQ)),E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,ge(e.qInv))])};Q.publicKeyFromAsn1=function(e){var t={},r=[];if(E.validate(e,ad,t,r)){var n=E.derToOid(t.publicKeyOid);if(n!==Q.oids.rsaEncryption){var i=new Error("Cannot read public key. Unknown OID.");throw i.oid=n,i}e=t.rsaPublicKey}if(r=[],!E.validate(e,od,t,r)){var i=new Error("Cannot read public key. ASN.1 object does not contain an RSAPublicKey.");throw i.errors=r,i}var s=Y.util.createBuffer(t.publicKeyModulus).toHex(),o=Y.util.createBuffer(t.publicKeyExponent).toHex();return Q.setRsaPublicKey(new st(s,16),new st(o,16))};Q.publicKeyToAsn1=Q.publicKeyToSubjectPublicKeyInfo=function(e){return E.create(E.Class.UNIVERSAL,E.Type.SEQUENCE,!0,[E.create(E.Class.UNIVERSAL,E.Type.SEQUENCE,!0,[E.create(E.Class.UNIVERSAL,E.Type.OID,!1,E.oidToDer(Q.oids.rsaEncryption).getBytes()),E.create(E.Class.UNIVERSAL,E.Type.NULL,!1,"")]),E.create(E.Class.UNIVERSAL,E.Type.BITSTRING,!1,[Q.publicKeyToRSAPublicKey(e)])])};Q.publicKeyToRSAPublicKey=function(e){return E.create(E.Class.UNIVERSAL,E.Type.SEQUENCE,!0,[E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,ge(e.n)),E.create(E.Class.UNIVERSAL,E.Type.INTEGER,!1,ge(e.e))])};function mc(e,t,r){var n=Y.util.createBuffer(),i=Math.ceil(t.n.bitLength()/8);if(e.length>i-11){var s=new Error("Message is too long for PKCS#1 v1.5 padding.");throw s.length=e.length,s.max=i-11,s}n.putByte(0),n.putByte(r);var o=i-3-e.length,a;if(r===0||r===1){a=r===0?0:255;for(var c=0;c0;){for(var f=0,u=Y.random.getBytes(o),c=0;c"u")throw new Error("Encryption block is invalid.");var c=0;if(a===0){c=i-3-n;for(var f=0;f1;){if(s.getByte()!==255){--s.read;break}++c}else if(a===2)for(c=0;s.length()>1;){if(s.getByte()===0){--s.read;break}++c}var u=s.getByte();if(u!==0||c!==i-3-s.length())throw new Error("Encryption block is invalid.");return s.getBytes()}function ud(e,t,r){typeof t=="function"&&(r=t,t={}),t=t||{};var n={algorithm:{name:t.algorithm||"PRIMEINC",options:{workers:t.workers||2,workLoad:t.workLoad||100,workerScript:t.workerScript}}};"prng"in t&&(n.prng=t.prng),i();function i(){s(e.pBits,function(a,c){if(a)return r(a);if(e.p=c,e.q!==null)return o(a,e.q);s(e.qBits,o)})}function s(a,c){Y.prime.generateProbablePrime(a,n,c)}function o(a,c){if(a)return r(a);if(e.q=c,e.p.compareTo(e.q)<0){var f=e.p;e.p=e.q,e.q=f}if(e.p.subtract(st.ONE).gcd(e.e).compareTo(st.ONE)!==0){e.p=null,i();return}if(e.q.subtract(st.ONE).gcd(e.e).compareTo(st.ONE)!==0){e.q=null,s(e.qBits,o);return}if(e.p1=e.p.subtract(st.ONE),e.q1=e.q.subtract(st.ONE),e.phi=e.p1.multiply(e.q1),e.phi.gcd(e.e).compareTo(st.ONE)!==0){e.p=e.q=null,i();return}if(e.n=e.p.multiply(e.q),e.n.bitLength()!==e.bits){e.q=null,s(e.qBits,o);return}var u=e.e.modInverse(e.phi);e.keys={privateKey:Q.rsa.setPrivateKey(e.n,e.e,u,e.p,e.q,u.mod(e.p1),u.mod(e.q1),e.q.modInverse(e.p)),publicKey:Q.rsa.setPublicKey(e.n,e.e)},r(null,e.keys)}}function ge(e){var t=e.toString(16);t[0]>="8"&&(t="00"+t);var r=Y.util.hexToBytes(t);return r.length>1&&(r.charCodeAt(0)===0&&!(r.charCodeAt(1)&128)||r.charCodeAt(0)===255&&(r.charCodeAt(1)&128)===128)?r.substr(1):r}function hd(e){return e<=100?27:e<=150?18:e<=200?15:e<=250?12:e<=300?9:e<=350?8:e<=400?7:e<=500?6:e<=600?5:e<=800?4:e<=1250?3:2}function pc(e){return Y.util.isNodejs&&typeof Ws[e]=="function"}function dc(e){return typeof te.globalScope<"u"&&typeof te.globalScope.crypto=="object"&&typeof te.globalScope.crypto.subtle=="object"&&typeof te.globalScope.crypto.subtle[e]=="function"}function yc(e){return typeof te.globalScope<"u"&&typeof te.globalScope.msCrypto=="object"&&typeof te.globalScope.msCrypto.subtle=="object"&&typeof te.globalScope.msCrypto.subtle[e]=="function"}function xc(e){for(var t=Y.util.hexToBytes(e.toString(16)),r=new Uint8Array(t.length),n=0;n{var H=ht();Os();ln();_0();ir();ci();P0();K0();pn();Z0();Bi();Ct();typeof vc>"u"&&(vc=H.jsbn.BigInteger);var vc,I=H.asn1,tt=H.pki=H.pki||{};Bc.exports=tt.pbe=H.pbe=H.pbe||{};var ar=tt.oids,ld={name:"EncryptedPrivateKeyInfo",tagClass:I.Class.UNIVERSAL,type:I.Type.SEQUENCE,constructed:!0,value:[{name:"EncryptedPrivateKeyInfo.encryptionAlgorithm",tagClass:I.Class.UNIVERSAL,type:I.Type.SEQUENCE,constructed:!0,value:[{name:"AlgorithmIdentifier.algorithm",tagClass:I.Class.UNIVERSAL,type:I.Type.OID,constructed:!1,capture:"encryptionOid"},{name:"AlgorithmIdentifier.parameters",tagClass:I.Class.UNIVERSAL,type:I.Type.SEQUENCE,constructed:!0,captureAsn1:"encryptionParams"}]},{name:"EncryptedPrivateKeyInfo.encryptedData",tagClass:I.Class.UNIVERSAL,type:I.Type.OCTETSTRING,constructed:!1,capture:"encryptedData"}]},pd={name:"PBES2Algorithms",tagClass:I.Class.UNIVERSAL,type:I.Type.SEQUENCE,constructed:!0,value:[{name:"PBES2Algorithms.keyDerivationFunc",tagClass:I.Class.UNIVERSAL,type:I.Type.SEQUENCE,constructed:!0,value:[{name:"PBES2Algorithms.keyDerivationFunc.oid",tagClass:I.Class.UNIVERSAL,type:I.Type.OID,constructed:!1,capture:"kdfOid"},{name:"PBES2Algorithms.params",tagClass:I.Class.UNIVERSAL,type:I.Type.SEQUENCE,constructed:!0,value:[{name:"PBES2Algorithms.params.salt",tagClass:I.Class.UNIVERSAL,type:I.Type.OCTETSTRING,constructed:!1,capture:"kdfSalt"},{name:"PBES2Algorithms.params.iterationCount",tagClass:I.Class.UNIVERSAL,type:I.Type.INTEGER,constructed:!1,capture:"kdfIterationCount"},{name:"PBES2Algorithms.params.keyLength",tagClass:I.Class.UNIVERSAL,type:I.Type.INTEGER,constructed:!1,optional:!0,capture:"keyLength"},{name:"PBES2Algorithms.params.prf",tagClass:I.Class.UNIVERSAL,type:I.Type.SEQUENCE,constructed:!0,optional:!0,value:[{name:"PBES2Algorithms.params.prf.algorithm",tagClass:I.Class.UNIVERSAL,type:I.Type.OID,constructed:!1,capture:"prfOid"}]}]}]},{name:"PBES2Algorithms.encryptionScheme",tagClass:I.Class.UNIVERSAL,type:I.Type.SEQUENCE,constructed:!0,value:[{name:"PBES2Algorithms.encryptionScheme.oid",tagClass:I.Class.UNIVERSAL,type:I.Type.OID,constructed:!1,capture:"encOid"},{name:"PBES2Algorithms.encryptionScheme.iv",tagClass:I.Class.UNIVERSAL,type:I.Type.OCTETSTRING,constructed:!1,capture:"encIv"}]}]},dd={name:"pkcs-12PbeParams",tagClass:I.Class.UNIVERSAL,type:I.Type.SEQUENCE,constructed:!0,value:[{name:"pkcs-12PbeParams.salt",tagClass:I.Class.UNIVERSAL,type:I.Type.OCTETSTRING,constructed:!1,capture:"salt"},{name:"pkcs-12PbeParams.iterations",tagClass:I.Class.UNIVERSAL,type:I.Type.INTEGER,constructed:!1,capture:"iterations"}]};tt.encryptPrivateKeyInfo=function(e,t,r){r=r||{},r.saltSize=r.saltSize||8,r.count=r.count||2048,r.algorithm=r.algorithm||"aes128",r.prfAlgorithm=r.prfAlgorithm||"sha1";var n=H.random.getBytesSync(r.saltSize),i=r.count,s=I.integerToDer(i),o,a,c;if(r.algorithm.indexOf("aes")===0||r.algorithm==="des"){var f,u,h;switch(r.algorithm){case"aes128":o=16,f=16,u=ar["aes128-CBC"],h=H.aes.createEncryptionCipher;break;case"aes192":o=24,f=16,u=ar["aes192-CBC"],h=H.aes.createEncryptionCipher;break;case"aes256":o=32,f=16,u=ar["aes256-CBC"],h=H.aes.createEncryptionCipher;break;case"des":o=8,f=8,u=ar.desCBC,h=H.des.createEncryptionCipher;break;default:var l=new Error("Cannot encrypt private key. Unknown encryption algorithm.");throw l.algorithm=r.algorithm,l}var x="hmacWith"+r.prfAlgorithm.toUpperCase(),p=Sc(x),d=H.pkcs5.pbkdf2(t,n,i,o,p),y=H.random.getBytesSync(f),g=h(d);g.start(y),g.update(I.toDer(e)),g.finish(),c=g.output.getBytes();var v=yd(n,s,o,x);a=I.create(I.Class.UNIVERSAL,I.Type.SEQUENCE,!0,[I.create(I.Class.UNIVERSAL,I.Type.OID,!1,I.oidToDer(ar.pkcs5PBES2).getBytes()),I.create(I.Class.UNIVERSAL,I.Type.SEQUENCE,!0,[I.create(I.Class.UNIVERSAL,I.Type.SEQUENCE,!0,[I.create(I.Class.UNIVERSAL,I.Type.OID,!1,I.oidToDer(ar.pkcs5PBKDF2).getBytes()),v]),I.create(I.Class.UNIVERSAL,I.Type.SEQUENCE,!0,[I.create(I.Class.UNIVERSAL,I.Type.OID,!1,I.oidToDer(u).getBytes()),I.create(I.Class.UNIVERSAL,I.Type.OCTETSTRING,!1,y)])])])}else if(r.algorithm==="3des"){o=24;var m=new H.util.ByteBuffer(n),d=tt.pbe.generatePkcs12Key(t,m,1,i,o),y=tt.pbe.generatePkcs12Key(t,m,2,i,o),g=H.des.createEncryptionCipher(d);g.start(y),g.update(I.toDer(e)),g.finish(),c=g.output.getBytes(),a=I.create(I.Class.UNIVERSAL,I.Type.SEQUENCE,!0,[I.create(I.Class.UNIVERSAL,I.Type.OID,!1,I.oidToDer(ar["pbeWithSHAAnd3-KeyTripleDES-CBC"]).getBytes()),I.create(I.Class.UNIVERSAL,I.Type.SEQUENCE,!0,[I.create(I.Class.UNIVERSAL,I.Type.OCTETSTRING,!1,n),I.create(I.Class.UNIVERSAL,I.Type.INTEGER,!1,s.getBytes())])])}else{var l=new Error("Cannot encrypt private key. Unknown encryption algorithm.");throw l.algorithm=r.algorithm,l}var C=I.create(I.Class.UNIVERSAL,I.Type.SEQUENCE,!0,[a,I.create(I.Class.UNIVERSAL,I.Type.OCTETSTRING,!1,c)]);return C};tt.decryptPrivateKeyInfo=function(e,t){var r=null,n={},i=[];if(!I.validate(e,ld,n,i)){var s=new Error("Cannot read encrypted private key. ASN.1 object is not a supported EncryptedPrivateKeyInfo.");throw s.errors=i,s}var o=I.derToOid(n.encryptionOid),a=tt.pbe.getCipher(o,n.encryptionParams,t),c=H.util.createBuffer(n.encryptedData);return a.update(c),a.finish()&&(r=I.fromDer(a.output)),r};tt.encryptedPrivateKeyToPem=function(e,t){var r={type:"ENCRYPTED PRIVATE KEY",body:I.toDer(e).getBytes()};return H.pem.encode(r,{maxline:t})};tt.encryptedPrivateKeyFromPem=function(e){var t=H.pem.decode(e)[0];if(t.type!=="ENCRYPTED PRIVATE KEY"){var r=new Error('Could not convert encrypted private key from PEM; PEM header type is "ENCRYPTED PRIVATE KEY".');throw r.headerType=t.type,r}if(t.procType&&t.procType.type==="ENCRYPTED")throw new Error("Could not convert encrypted private key from PEM; PEM is encrypted.");return I.fromDer(t.body)};tt.encryptRsaPrivateKey=function(e,t,r){if(r=r||{},!r.legacy){var n=tt.wrapRsaPrivateKey(tt.privateKeyToAsn1(e));return n=tt.encryptPrivateKeyInfo(n,t,r),tt.encryptedPrivateKeyToPem(n)}var i,s,o,a;switch(r.algorithm){case"aes128":i="AES-128-CBC",o=16,s=H.random.getBytesSync(16),a=H.aes.createEncryptionCipher;break;case"aes192":i="AES-192-CBC",o=24,s=H.random.getBytesSync(16),a=H.aes.createEncryptionCipher;break;case"aes256":i="AES-256-CBC",o=32,s=H.random.getBytesSync(16),a=H.aes.createEncryptionCipher;break;case"3des":i="DES-EDE3-CBC",o=24,s=H.random.getBytesSync(8),a=H.des.createEncryptionCipher;break;case"des":i="DES-CBC",o=8,s=H.random.getBytesSync(8),a=H.des.createEncryptionCipher;break;default:var c=new Error('Could not encrypt RSA private key; unsupported encryption algorithm "'+r.algorithm+'".');throw c.algorithm=r.algorithm,c}var f=H.pbe.opensslDeriveBytes(t,s.substr(0,8),o),u=a(f);u.start(s),u.update(I.toDer(tt.privateKeyToAsn1(e))),u.finish();var h={type:"RSA PRIVATE KEY",procType:{version:"4",type:"ENCRYPTED"},dekInfo:{algorithm:i,parameters:H.util.bytesToHex(s).toUpperCase()},body:u.output.getBytes()};return H.pem.encode(h)};tt.decryptRsaPrivateKey=function(e,t){var r=null,n=H.pem.decode(e)[0];if(n.type!=="ENCRYPTED PRIVATE KEY"&&n.type!=="PRIVATE KEY"&&n.type!=="RSA PRIVATE KEY"){var i=new Error('Could not convert private key from PEM; PEM header type is not "ENCRYPTED PRIVATE KEY", "PRIVATE KEY", or "RSA PRIVATE KEY".');throw i.headerType=i,i}if(n.procType&&n.procType.type==="ENCRYPTED"){var s,o;switch(n.dekInfo.algorithm){case"DES-CBC":s=8,o=H.des.createDecryptionCipher;break;case"DES-EDE3-CBC":s=24,o=H.des.createDecryptionCipher;break;case"AES-128-CBC":s=16,o=H.aes.createDecryptionCipher;break;case"AES-192-CBC":s=24,o=H.aes.createDecryptionCipher;break;case"AES-256-CBC":s=32,o=H.aes.createDecryptionCipher;break;case"RC2-40-CBC":s=5,o=function(h){return H.rc2.createDecryptionCipher(h,40)};break;case"RC2-64-CBC":s=8,o=function(h){return H.rc2.createDecryptionCipher(h,64)};break;case"RC2-128-CBC":s=16,o=function(h){return H.rc2.createDecryptionCipher(h,128)};break;default:var i=new Error('Could not decrypt private key; unsupported encryption algorithm "'+n.dekInfo.algorithm+'".');throw i.algorithm=n.dekInfo.algorithm,i}var a=H.util.hexToBytes(n.dekInfo.parameters),c=H.pbe.opensslDeriveBytes(t,a.substr(0,8),s),f=o(c);if(f.start(a),f.update(H.util.createBuffer(n.body)),f.finish())r=f.output.getBytes();else return r}else r=n.body;return n.type==="ENCRYPTED PRIVATE KEY"?r=tt.decryptPrivateKeyInfo(I.fromDer(r),t):r=I.fromDer(r),r!==null&&(r=tt.privateKeyFromAsn1(r)),r};tt.pbe.generatePkcs12Key=function(e,t,r,n,i,s){var o,a;if(typeof s>"u"||s===null){if(!("sha1"in H.md))throw new Error('"sha1" hash algorithm unavailable.');s=H.md.sha1.create()}var c=s.digestLength,f=s.blockLength,u=new H.util.ByteBuffer,h=new H.util.ByteBuffer;if(e!=null){for(a=0;a=0;a--)q=q>>8,q+=L.at(a)+U.at(a),U.setAt(a,q&255);M.putBuffer(U)}m=M,u.putBuffer(B)}return u.truncate(u.length()-i),u};tt.pbe.getCipher=function(e,t,r){switch(e){case tt.oids.pkcs5PBES2:return tt.pbe.getCipherForPBES2(e,t,r);case tt.oids["pbeWithSHAAnd3-KeyTripleDES-CBC"]:case tt.oids["pbewithSHAAnd40BitRC2-CBC"]:return tt.pbe.getCipherForPKCS12PBE(e,t,r);default:var n=new Error("Cannot read encrypted PBE data block. Unsupported OID.");throw n.oid=e,n.supportedOids=["pkcs5PBES2","pbeWithSHAAnd3-KeyTripleDES-CBC","pbewithSHAAnd40BitRC2-CBC"],n}};tt.pbe.getCipherForPBES2=function(e,t,r){var n={},i=[];if(!I.validate(t,pd,n,i)){var s=new Error("Cannot read password-based-encryption algorithm parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.");throw s.errors=i,s}if(e=I.derToOid(n.kdfOid),e!==tt.oids.pkcs5PBKDF2){var s=new Error("Cannot read encrypted private key. Unsupported key derivation function OID.");throw s.oid=e,s.supportedOids=["pkcs5PBKDF2"],s}if(e=I.derToOid(n.encOid),e!==tt.oids["aes128-CBC"]&&e!==tt.oids["aes192-CBC"]&&e!==tt.oids["aes256-CBC"]&&e!==tt.oids["des-EDE3-CBC"]&&e!==tt.oids.desCBC){var s=new Error("Cannot read encrypted private key. Unsupported encryption scheme OID.");throw s.oid=e,s.supportedOids=["aes128-CBC","aes192-CBC","aes256-CBC","des-EDE3-CBC","desCBC"],s}var o=n.kdfSalt,a=H.util.createBuffer(n.kdfIterationCount);a=a.getInt(a.length()<<3);var c,f;switch(tt.oids[e]){case"aes128-CBC":c=16,f=H.aes.createDecryptionCipher;break;case"aes192-CBC":c=24,f=H.aes.createDecryptionCipher;break;case"aes256-CBC":c=32,f=H.aes.createDecryptionCipher;break;case"des-EDE3-CBC":c=24,f=H.des.createDecryptionCipher;break;case"desCBC":c=8,f=H.des.createDecryptionCipher;break}var u=Ec(n.prfOid),h=H.pkcs5.pbkdf2(r,o,a,c,u),l=n.encIv,x=f(h);return x.start(l),x};tt.pbe.getCipherForPKCS12PBE=function(e,t,r){var n={},i=[];if(!I.validate(t,dd,n,i)){var s=new Error("Cannot read password-based-encryption algorithm parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.");throw s.errors=i,s}var o=H.util.createBuffer(n.salt),a=H.util.createBuffer(n.iterations);a=a.getInt(a.length()<<3);var c,f,u;switch(e){case tt.oids["pbeWithSHAAnd3-KeyTripleDES-CBC"]:c=24,f=8,u=H.des.startDecrypting;break;case tt.oids["pbewithSHAAnd40BitRC2-CBC"]:c=5,f=8,u=function(d,y){var g=H.rc2.createDecryptionCipher(d,40);return g.start(y,null),g};break;default:var s=new Error("Cannot read PKCS #12 PBE data block. Unsupported OID.");throw s.oid=e,s}var h=Ec(n.prfOid),l=tt.pbe.generatePkcs12Key(r,o,1,a,c,h);h.start();var x=tt.pbe.generatePkcs12Key(r,o,2,a,f,h);return u(l,x)};tt.pbe.opensslDeriveBytes=function(e,t,r,n){if(typeof n>"u"||n===null){if(!("md5"in H.md))throw new Error('"md5" hash algorithm unavailable.');n=H.md.md5.create()}t===null&&(t="");for(var i=[wc(n,e+t)],s=16,o=1;s{var mt=ht();ir();Ct();var Sn=xf.exports=mt.sha512=mt.sha512||{};mt.md.sha512=mt.md.algorithms.sha512=Sn;var df=mt.sha384=mt.sha512.sha384=mt.sha512.sha384||{};df.create=function(){return Sn.create("SHA-384")};mt.md.sha384=mt.md.algorithms.sha384=df;mt.sha512.sha256=mt.sha512.sha256||{create:function(){return Sn.create("SHA-512/256")}};mt.md["sha512/256"]=mt.md.algorithms["sha512/256"]=mt.sha512.sha256;mt.sha512.sha224=mt.sha512.sha224||{create:function(){return Sn.create("SHA-512/224")}};mt.md["sha512/224"]=mt.md.algorithms["sha512/224"]=mt.sha512.sha224;Sn.create=function(e){if(yf||Uy(),typeof e>"u"&&(e="SHA-512"),!(e in yr))throw new Error("Invalid SHA-512 algorithm: "+e);for(var t=yr[e],r=null,n=mt.util.createBuffer(),i=new Array(80),s=0;s<80;++s)i[s]=new Array(2);var o=64;switch(e){case"SHA-384":o=48;break;case"SHA-512/256":o=32;break;case"SHA-512/224":o=28;break}var a={algorithm:e.replace("-","").toLowerCase(),blockLength:128,digestLength:o,messageLength:0,fullMessageLength:null,messageLengthSize:16};return a.start=function(){a.messageLength=0,a.fullMessageLength=a.messageLength128=[];for(var c=a.messageLengthSize/4,f=0;f>>0,u>>>0];for(var h=a.fullMessageLength.length-1;h>=0;--h)a.fullMessageLength[h]+=u[1],u[1]=u[0]+(a.fullMessageLength[h]/4294967296>>>0),a.fullMessageLength[h]=a.fullMessageLength[h]>>>0,u[0]=u[1]/4294967296>>>0;return n.putBytes(c),pf(r,i,n),(n.read>2048||n.length()===0)&&n.compact(),a},a.digest=function(){var c=mt.util.createBuffer();c.putBytes(n.bytes());var f=a.fullMessageLength[a.fullMessageLength.length-1]+a.messageLengthSize,u=f&a.blockLength-1;c.putBytes(Do.substr(0,a.blockLength-u));for(var h,l,x=a.fullMessageLength[0]*8,p=0;p>>0,x+=l,c.putInt32(x>>>0),x=h>>>0;c.putInt32(x);for(var d=new Array(r.length),p=0;p=128;){for(A=0;A<16;++A)t[A][0]=r.getInt32()>>>0,t[A][1]=r.getInt32()>>>0;for(;A<80;++A)_=t[A-2],N=_[0],T=_[1],n=((N>>>19|T<<13)^(T>>>29|N<<3)^N>>>6)>>>0,i=((N<<13|T>>>19)^(T<<3|N>>>29)^(N<<26|T>>>6))>>>0,k=t[A-15],N=k[0],T=k[1],s=((N>>>1|T<<31)^(N>>>8|T<<24)^N>>>7)>>>0,o=((N<<31|T>>>1)^(N<<24|T>>>8)^(N<<25|T>>>7))>>>0,w=t[A-7],K=t[A-16],T=i+w[1]+o+K[1],t[A][0]=n+w[0]+s+K[0]+(T/4294967296>>>0)>>>0,t[A][1]=T>>>0;for(d=e[0][0],y=e[0][1],g=e[1][0],v=e[1][1],m=e[2][0],C=e[2][1],S=e[3][0],B=e[3][1],R=e[4][0],L=e[4][1],O=e[5][0],M=e[5][1],U=e[6][0],q=e[6][1],z=e[7][0],Z=e[7][1],A=0;A<80;++A)f=((R>>>14|L<<18)^(R>>>18|L<<14)^(L>>>9|R<<23))>>>0,u=((R<<18|L>>>14)^(R<<14|L>>>18)^(L<<23|R>>>9))>>>0,h=(U^R&(O^U))>>>0,l=(q^L&(M^q))>>>0,a=((d>>>28|y<<4)^(y>>>2|d<<30)^(y>>>7|d<<25))>>>0,c=((d<<4|y>>>28)^(y<<30|d>>>2)^(y<<25|d>>>7))>>>0,x=(d&g|m&(d^g))>>>0,p=(y&v|C&(y^v))>>>0,T=Z+u+l+Po[A][1]+t[A][1],n=z+f+h+Po[A][0]+t[A][0]+(T/4294967296>>>0)>>>0,i=T>>>0,T=c+p,s=a+x+(T/4294967296>>>0)>>>0,o=T>>>0,z=U,Z=q,U=O,q=M,O=R,M=L,T=B+i,R=S+n+(T/4294967296>>>0)>>>0,L=T>>>0,S=m,B=C,m=g,C=v,g=d,v=y,T=i+o,d=n+s+(T/4294967296>>>0)>>>0,y=T>>>0;T=e[0][1]+y,e[0][0]=e[0][0]+d+(T/4294967296>>>0)>>>0,e[0][1]=T>>>0,T=e[1][1]+v,e[1][0]=e[1][0]+g+(T/4294967296>>>0)>>>0,e[1][1]=T>>>0,T=e[2][1]+C,e[2][0]=e[2][0]+m+(T/4294967296>>>0)>>>0,e[2][1]=T>>>0,T=e[3][1]+B,e[3][0]=e[3][0]+S+(T/4294967296>>>0)>>>0,e[3][1]=T>>>0,T=e[4][1]+L,e[4][0]=e[4][0]+R+(T/4294967296>>>0)>>>0,e[4][1]=T>>>0,T=e[5][1]+M,e[5][0]=e[5][0]+O+(T/4294967296>>>0)>>>0,e[5][1]=T>>>0,T=e[6][1]+q,e[6][0]=e[6][0]+U+(T/4294967296>>>0)>>>0,e[6][1]=T>>>0,T=e[7][1]+Z,e[7][0]=e[7][0]+z+(T/4294967296>>>0)>>>0,e[7][1]=T>>>0,F-=128}}});var x1={};Lt(x1,{noise:()=>y1,pureJsCrypto:()=>oi});function Ee(e){return globalThis.Buffer!=null?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):e}function rt(e=0){return globalThis.Buffer?.alloc!=null?Ee(globalThis.Buffer.alloc(e)):new Uint8Array(e)}function Bt(e=0){return globalThis.Buffer?.allocUnsafe!=null?Ee(globalThis.Buffer.allocUnsafe(e)):new Uint8Array(e)}var hu=Math.pow(2,7),lu=Math.pow(2,14),pu=Math.pow(2,21),Fi=Math.pow(2,28),Hi=Math.pow(2,35),qi=Math.pow(2,42),zi=Math.pow(2,49),ct=128,Vt=127;function Se(e){if(eNumber.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function du(e,t,r=0){switch(Se(e)){case 8:t[r++]=e&255|ct,e/=128;case 7:t[r++]=e&255|ct,e/=128;case 6:t[r++]=e&255|ct,e/=128;case 5:t[r++]=e&255|ct,e/=128;case 4:t[r++]=e&255|ct,e>>>=7;case 3:t[r++]=e&255|ct,e>>>=7;case 2:t[r++]=e&255|ct,e>>>=7;case 1:{t[r++]=e&255,e>>>=7;break}default:throw new Error("unreachable")}return t}function yu(e,t,r=0){switch(Se(e)){case 8:t.set(r++,e&255|ct),e/=128;case 7:t.set(r++,e&255|ct),e/=128;case 6:t.set(r++,e&255|ct),e/=128;case 5:t.set(r++,e&255|ct),e/=128;case 4:t.set(r++,e&255|ct),e>>>=7;case 3:t.set(r++,e&255|ct),e>>>=7;case 2:t.set(r++,e&255|ct),e>>>=7;case 1:{t.set(r++,e&255),e>>>=7;break}default:throw new Error("unreachable")}return t}function xu(e,t){let r=e[t],n=0;if(n+=r&Vt,ri+s.length,0));let r=Bt(t),n=0;for(let i of e)r.set(i,n),n+=i.length;return Ee(r)}function Rt(e,t){if(e===t)return!0;if(e.byteLength!==t.byteLength)return!1;for(let r=0;r0&&this.appendAll(t)}*[Symbol.iterator](){yield*this.bufs}get byteLength(){return this.length}append(...t){this.appendAll(t)}appendAll(t){let r=0;for(let n of t)if(n instanceof Uint8Array)r+=n.byteLength,this.bufs.push(n);else if(br(n))r+=n.byteLength,this.bufs.push(...n.bufs);else throw new Error("Could not append value, must be an Uint8Array or a Uint8ArrayList");this.length+=r}prepend(...t){this.prependAll(t)}prependAll(t){let r=0;for(let n of t.reverse())if(n instanceof Uint8Array)r+=n.byteLength,this.bufs.unshift(n);else if(br(n))r+=n.byteLength,this.bufs.unshift(...n.bufs);else throw new Error("Could not prepend value, must be an Uint8Array or a Uint8ArrayList");this.length+=r}get(t){let r=oa(this.bufs,t);return r.buf[r.index]}set(t,r){let n=oa(this.bufs,t);n.buf[n.index]=r}write(t,r=0){if(t instanceof Uint8Array)for(let n=0;n0;)if(t>=this.bufs[0].byteLength)t-=this.bufs[0].byteLength,this.length-=this.bufs[0].byteLength,this.bufs.shift();else{this.bufs[0]=this.bufs[0].subarray(t),this.length-=t;break}}}slice(t,r){let{bufs:n,length:i}=this._subList(t,r);return Zt(n,i)}subarray(t,r){let{bufs:n,length:i}=this._subList(t,r);return n.length===1?n[0]:Zt(n,i)}sublist(t,r){let{bufs:n,length:i}=this._subList(t,r),s=new e;return s.length=i,s.bufs=[...n],s}_subList(t,r){if(t=t??0,r=r??this.length,t<0&&(t=this.length+t),r<0&&(r=this.length+r),t<0||r>this.length)throw new RangeError("index is out of bounds");if(t===r)return{bufs:[],length:0};if(t===0&&r===this.length)return{bufs:this.bufs,length:this.length};let n=[],i=0;for(let s=0;s=c)continue;let f=t>=a&&ta&&r<=c;if(f&&u){if(t===a&&r===c){n.push(o);break}let h=t-a;n.push(o.subarray(h,h+(r-t)));break}if(f){if(t===0){n.push(o);continue}n.push(o.subarray(t-a));continue}if(u){if(r===c){n.push(o);break}n.push(o.subarray(0,r-a));break}n.push(o)}return{bufs:n,length:r-t}}indexOf(t,r=0){if(!br(t)&&!(t instanceof Uint8Array))throw new TypeError('The "value" argument must be a Uint8ArrayList or Uint8Array');let n=t instanceof Uint8Array?t:t.subarray();if(r=Number(r??0),isNaN(r)&&(r=0),r<0&&(r=this.length+r),r<0&&(r=0),t.length===0)return r>this.length?this.length:r;let i=n.byteLength;if(i===0)throw new TypeError("search must be at least 1 byte long");let s=256,o=new Int32Array(s);for(let h=0;h=0;l--){let x=this.get(h+l);if(n[l]!==x){u=Math.max(1,l-a[x]);break}}if(u===0)return h}return-1}getInt8(t){let r=this.subarray(t,t+1);return new DataView(r.buffer,r.byteOffset,r.byteLength).getInt8(0)}setInt8(t,r){let n=Bt(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setInt8(0,r),this.write(n,t)}getInt16(t,r){let n=this.subarray(t,t+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt16(0,r)}setInt16(t,r,n){let i=rt(2);new DataView(i.buffer,i.byteOffset,i.byteLength).setInt16(0,r,n),this.write(i,t)}getInt32(t,r){let n=this.subarray(t,t+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt32(0,r)}setInt32(t,r,n){let i=rt(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setInt32(0,r,n),this.write(i,t)}getBigInt64(t,r){let n=this.subarray(t,t+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigInt64(0,r)}setBigInt64(t,r,n){let i=rt(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setBigInt64(0,r,n),this.write(i,t)}getUint8(t){let r=this.subarray(t,t+1);return new DataView(r.buffer,r.byteOffset,r.byteLength).getUint8(0)}setUint8(t,r){let n=Bt(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setUint8(0,r),this.write(n,t)}getUint16(t,r){let n=this.subarray(t,t+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint16(0,r)}setUint16(t,r,n){let i=rt(2);new DataView(i.buffer,i.byteOffset,i.byteLength).setUint16(0,r,n),this.write(i,t)}getUint32(t,r){let n=this.subarray(t,t+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint32(0,r)}setUint32(t,r,n){let i=rt(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setUint32(0,r,n),this.write(i,t)}getBigUint64(t,r){let n=this.subarray(t,t+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigUint64(0,r)}setBigUint64(t,r,n){let i=rt(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setBigUint64(0,r,n),this.write(i,t)}getFloat32(t,r){let n=this.subarray(t,t+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat32(0,r)}setFloat32(t,r,n){let i=rt(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setFloat32(0,r,n),this.write(i,t)}getFloat64(t,r){let n=this.subarray(t,t+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat64(0,r)}setFloat64(t,r,n){let i=rt(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setFloat64(0,r,n),this.write(i,t)}equals(t){if(t==null||!(t instanceof e)||t.bufs.length!==this.bufs.length)return!1;for(let r=0;ri+s.byteLength,0)),n.length=r,n}};function Pn(e){return e[Symbol.asyncIterator]!=null}var kn=e=>{let t=Se(e),r=Bt(t);return sa(e,r),kn.bytes=t,r};kn.bytes=0;function Qr(e,t){t=t??{};let r=t.lengthEncoder??kn;function*n(i){let s=r(i.byteLength);s instanceof Uint8Array?yield s:yield*s,i instanceof Uint8Array?yield i:yield*i}return Pn(e)?async function*(){for await(let i of e)yield*n(i)}():function*(){for(let i of e)yield*n(i)}()}Qr.single=(e,t)=>{t=t??{};let r=t.lengthEncoder??kn;return new At(r(e.byteLength),e)};var vr=Gt(ua(),1);var bu=8,vu=1024*1024*4,Qe;(function(e){e[e.LENGTH=0]="LENGTH",e[e.DATA=1]="DATA"})(Qe||(Qe={}));var Yi=e=>{let t=Dn(e);return Yi.bytes=Se(t),t};Yi.bytes=0;function Jr(e,t){let r=new At,n=Qe.LENGTH,i=-1,s=t?.lengthDecoder??Yi,o=t?.maxLengthLength??bu,a=t?.maxDataLength??vu;function*c(){for(;r.byteLength>0;){if(n===Qe.LENGTH)try{if(i=s(r),i<0)throw(0,vr.default)(new Error("invalid message length"),"ERR_INVALID_MSG_LENGTH");if(i>a)throw(0,vr.default)(new Error("message length too long"),"ERR_MSG_DATA_TOO_LONG");let f=s.bytes;r.consume(f),t?.onLength!=null&&t.onLength(i),n=Qe.DATA}catch(f){if(f instanceof RangeError){if(r.byteLength>o)throw(0,vr.default)(new Error("message length length too long"),"ERR_MSG_LENGTH_TOO_LONG");break}throw f}if(n===Qe.DATA){if(r.byteLength0)throw(0,vr.default)(new Error("unexpected end of input"),"ERR_UNEXPECTED_EOF")}():function*(){for(let f of e)r.append(f),yield*c();if(r.byteLength>0)throw(0,vr.default)(new Error("unexpected end of input"),"ERR_UNEXPECTED_EOF")}()}Jr.fromReader=(e,t)=>{let r=1,n=async function*(){for(;;)try{let{done:s,value:o}=await e.next(r);if(s===!0)return;o!=null&&(yield o)}catch(s){if(s.code==="ERR_UNDER_READ")return{done:!0,value:null};throw s}finally{r=1}}();return Jr(n,{...t??{},onLength:s=>{r=s}})};function ne(){let e={};return e.promise=new Promise((t,r)=>{e.resolve=t,e.reject=r}),e}var Un=class extends Error{type;code;constructor(t,r){super(t??"The operation was aborted"),this.type="aborted",this.name="AbortError",this.code=r??"ABORT_ERR"}};async function ha(e,t,r){if(t==null)return e;if(t.aborted)return Promise.reject(new Un(r?.errorMessage,r?.errorCode));let n,i=new Un(r?.errorMessage,r?.errorCode);try{return await Promise.race([e,new Promise((s,o)=>{n=()=>{o(i)},t.addEventListener("abort",n)})])}finally{n!=null&&t.removeEventListener("abort",n)}}var Wi=class{needNext;haveNext;ended;nextResult;constructor(){this.ended=!1,this.needNext=ne(),this.needNext.resolve(),this.haveNext=ne()}[Symbol.asyncIterator](){return this}async next(){if(this.nextResult==null&&await this.haveNext.promise,this.nextResult==null)throw new Error("Have next but next was undefined");let t=this.nextResult;return this.nextResult=void 0,this.needNext.resolve(),this.needNext=ne(),t}async throw(t){return this.ended=!0,t!=null&&this.haveNext.reject(t),{done:!0,value:void 0}}async return(){let t={done:!0,value:void 0};return await this._push(void 0),t}async push(t,r){await this._push(t,r)}async end(t,r){t!=null?await this.throw(t):await this._push(void 0,r)}async _push(t,r){if(t!=null&&this.ended)throw new Error("Cannot push value onto an ended pushable");this.nextResult!=null&&await this.needNext.promise,t!=null?this.nextResult={done:!1,value:t}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=ne(),await ha(this.needNext.promise,r?.signal,r)}};function la(){return new Wi}var Kn=class extends Error{code;constructor(t,r){super(t),this.code=r}},$i=class extends Kn{type;constructor(t){super(t,"ABORT_ERR"),this.type="aborted"}};function pa(e,t){let r=la();e.sink(r).catch(async o=>{await r.end(o)}),e.sink=async o=>{for await(let a of o)await r.push(a);await r.end()};let n=e.source;e.source[Symbol.iterator]!=null?n=e.source[Symbol.iterator]():e.source[Symbol.asyncIterator]!=null&&(n=e.source[Symbol.asyncIterator]());let i=new At;return{read:async(o,a)=>{a?.signal?.throwIfAborted();let c,f=new Promise((u,h)=>{c=()=>{h(new $i("Read aborted"))},a?.signal?.addEventListener("abort",c)});try{if(o==null){let{done:h,value:l}=await Promise.race([n.next(),f]);return h===!0?new At:l}for(;i.byteLength{a?.signal?.throwIfAborted(),o instanceof Uint8Array?await r.push(o,a):await r.push(o.subarray(),a)},unwrap:()=>{if(i.byteLength>0){let o=e.source;e.source=async function*(){t?.yieldBytes===!1?yield i:yield*i,yield*o}()}return e}}}var On=class extends Error{code;constructor(t,r){super(t),this.code=r}},da=e=>Dn(e);da.bytes=0;function Zi(e,t={}){let r=pa(e,t);return t.maxDataLength!=null&&t.maxLengthLength==null&&(t.maxLengthLength=Se(t.maxDataLength)),{read:async i=>{let s=-1,o=new At,a=t?.lengthDecoder??da;for(;;){o.append(await r.read(1,i));try{s=a(o)}catch(c){if(c instanceof RangeError)continue;throw c}if(t?.maxLengthLength!=null&&o.byteLength>t.maxLengthLength)throw new On("message length length too long","ERR_MSG_LENGTH_TOO_LONG");if(s>-1)break}if(t?.maxDataLength!=null&&s>t.maxDataLength)throw new On("message length too long","ERR_MSG_DATA_TOO_LONG");return r.read(s,i)},write:async(i,s)=>{await r.write(Qr.single(i,t),s)},writeV:async(i,s)=>{let o=new At(...i.map(a=>Qr.single(a,t)));await r.write(o,s)},unwrap:()=>r.unwrap()}}function Xi(){let e=ne(),t=!1;return{sink:async r=>{if(t)throw new Error("already piped");t=!0,e.resolve(r)},source:async function*(){yield*await e.promise}()}}function ya(){let e=Xi(),t=Xi();return[{source:e.source,sink:t.sink},{source:t.source,sink:e.sink}]}var Mn=class{buffer;mask;top;btm;next;constructor(t){if(!(t>0)||t-1&t)throw new Error("Max size for a FixedFIFO should be a power of two");this.buffer=new Array(t),this.mask=t-1,this.top=0,this.btm=0,this.next=null}push(t){return this.buffer[this.top]!==void 0?!1:(this.buffer[this.top]=t,this.top=this.top+1&this.mask,!0)}shift(){let t=this.buffer[this.btm];if(t!==void 0)return this.buffer[this.btm]=void 0,this.btm=this.btm+1&this.mask,t}isEmpty(){return this.buffer[this.btm]===void 0}},wr=class{size;hwm;head;tail;constructor(t={}){this.hwm=t.splitLimit??16,this.head=new Mn(this.hwm),this.tail=this.head,this.size=0}calculateSize(t){return t?.byteLength!=null?t.byteLength:1}push(t){if(t?.value!=null&&(this.size+=this.calculateSize(t.value)),!this.head.push(t)){let r=this.head;this.head=r.next=new Mn(2*this.head.buffer.length),this.head.push(t)}}shift(){let t=this.tail.shift();if(t===void 0&&this.tail.next!=null){let r=this.tail.next;this.tail.next=null,this.tail=r,t=this.tail.shift()}return t?.value!=null&&(this.size-=this.calculateSize(t.value)),t}isEmpty(){return this.head.isEmpty()}};var Qi=class extends Error{type;code;constructor(t,r){super(t??"The operation was aborted"),this.type="aborted",this.code=r??"ABORT_ERR"}};function Vn(e={}){return Eu(r=>{let n=r.shift();if(n==null)return{done:!0};if(n.error!=null)throw n.error;return{done:n.done===!0,value:n.value}},e)}function Eu(e,t){t=t??{};let r=t.onEnd,n=new wr,i,s,o,a=ne(),c=async()=>{try{return n.isEmpty()?o?{done:!0}:await new Promise((y,g)=>{s=v=>{s=null,n.push(v);try{y(e(n))}catch(m){g(m)}return i}}):e(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=ne()})}},f=y=>s!=null?s(y):(n.push(y),i),u=y=>(n=new wr,s!=null?s({error:y}):(n.push({error:y}),i)),h=y=>{if(o)return i;if(t?.objectMode!==!0&&y?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return f({done:!1,value:y})},l=y=>o?i:(o=!0,y!=null?u(y):f({done:!0})),x=()=>(n=new wr,l(),{done:!0}),p=y=>(l(y),{done:!0});if(i={[Symbol.asyncIterator](){return this},next:c,return:x,throw:p,push:h,end:l,get readableLength(){return n.size},onEmpty:async y=>{let g=y?.signal;if(g?.throwIfAborted(),n.isEmpty())return;let v,m;g!=null&&(v=new Promise((C,S)=>{m=()=>{S(new Qi)},g.addEventListener("abort",m)}));try{await Promise.race([a.promise,v])}finally{m!=null&&g!=null&&g?.removeEventListener("abort",m)}}},r==null)return i;let d=i;return i={[Symbol.asyncIterator](){return this},next(){return d.next()},throw(y){return d.throw(y),r!=null&&(r(y),r=void 0),{done:!0}},return(){return d.return(),r!=null&&(r(),r=void 0),{done:!0}},push:h,end(y){return d.end(y),r!=null&&(r(y),r=void 0),i},get readableLength(){return d.readableLength},onEmpty:y=>d.onEmpty(y)},i}function Su(e){return e[Symbol.asyncIterator]!=null}function Bu(...e){let t=[];for(let r of e)Su(r)||t.push(r);return t.length===e.length?function*(){for(let r of t)yield*r}():async function*(){let r=Vn({objectMode:!0});Promise.resolve().then(async()=>{try{await Promise.all(e.map(async n=>{for await(let i of n)r.push(i)})),r.end()}catch(n){r.end(n)}}),yield*r}()}var xa=Bu;function ga(e,...t){if(e==null)throw new Error("Empty pipeline");if(Ji(e)){let n=e;e=()=>n.source}else if(ba(e)||ma(e)){let n=e;e=()=>n}let r=[e,...t];if(r.length>1&&Ji(r[r.length-1])&&(r[r.length-1]=r[r.length-1].sink),r.length>2)for(let n=1;n{let t;for(;e.length>0;)t=e.shift()(t);return t},ma=e=>e?.[Symbol.asyncIterator]!=null,ba=e=>e?.[Symbol.iterator]!=null,Ji=e=>e==null?!1:e.sink!=null&&e.source!=null,Cu=e=>t=>{let r=e.sink(t);if(r?.then!=null){let n=Vn({objectMode:!0});r.then(()=>{n.end()},o=>{n.end(o)});let i,s=e.source;if(ma(s))i=async function*(){yield*s,n.end()};else if(ba(s))i=function*(){yield*s,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return xa(n,i())}return e.source};var Er=!!globalThis.process?.env?.DUMP_SESSION_KEYS;var Iu=e=>e instanceof Uint8Array;var Be=e=>new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4)),va=e=>new DataView(e.buffer,e.byteOffset,e.byteLength),Tu=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!Tu)throw new Error("Non little-endian hardware is not supported");function Fn(e){if(typeof e!="string")throw new Error(`utf8ToBytes expected string, got ${typeof e}`);return new Uint8Array(new TextEncoder().encode(e))}function Hn(e){if(typeof e=="string")e=Fn(e);else if(Iu(e))e=e.slice();else throw new Error(`expected Uint8Array, got ${typeof e}`);return e}var _u=e=>Object.prototype.toString.call(e)==="[object Object]"&&e.constructor===Object;function wa(e,t){if(t!==void 0&&(typeof t!="object"||!_u(t)))throw new Error("options must be object or undefined");return Object.assign(e,t)}function Je(e,t){if(!(e instanceof Uint8Array))throw new Error("Uint8Array expected");if(typeof t=="number"&&e.length!==t)throw new Error(`Uint8Array length ${t} expected`)}function Ea(e,t){if(e.length!==t.length)throw new Error("equalBytes: Different size of Uint8Arrays");let r=!0;for(let n=0;n(Object.assign(t,e),t);function ts(e,t,r,n){if(typeof e.setBigUint64=="function")return e.setBigUint64(t,r,n);let i=BigInt(32),s=BigInt(4294967295),o=Number(r>>i&s),a=Number(r&s),c=n?4:0,f=n?0:4;e.setUint32(t+c,o,n),e.setUint32(t+f,a,n)}function qn(e){if(!Number.isSafeInteger(e)||e<0)throw new Error(`Wrong positive integer: ${e}`)}function es(e){if(typeof e!="boolean")throw new Error(`Expected boolean, not ${e}`)}function Sr(e,...t){if(!(e instanceof Uint8Array))throw new Error("Expected Uint8Array");if(t.length>0&&!t.includes(e.length))throw new Error(`Expected Uint8Array of length ${t}, not of length=${e.length}`)}function rs(e,t=!0){if(e.destroyed)throw new Error("Hash instance has been destroyed");if(t&&e.finished)throw new Error("Hash#digest() has already been called")}function Sa(e,t){Sr(e);let r=t.outputLen;if(e.lengthe[t++]&255|(e[t++]&255)<<8,ns=class{constructor(t){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,t=Hn(t),Je(t,32);let r=Kt(t,0),n=Kt(t,2),i=Kt(t,4),s=Kt(t,6),o=Kt(t,8),a=Kt(t,10),c=Kt(t,12),f=Kt(t,14);this.r[0]=r&8191,this.r[1]=(r>>>13|n<<3)&8191,this.r[2]=(n>>>10|i<<6)&7939,this.r[3]=(i>>>7|s<<9)&8191,this.r[4]=(s>>>4|o<<12)&255,this.r[5]=o>>>1&8190,this.r[6]=(o>>>14|a<<2)&8191,this.r[7]=(a>>>11|c<<5)&8065,this.r[8]=(c>>>8|f<<8)&8191,this.r[9]=f>>>5&127;for(let u=0;u<8;u++)this.pad[u]=Kt(t,16+2*u)}process(t,r,n=!1){let i=n?0:2048,{h:s,r:o}=this,a=o[0],c=o[1],f=o[2],u=o[3],h=o[4],l=o[5],x=o[6],p=o[7],d=o[8],y=o[9],g=Kt(t,r+0),v=Kt(t,r+2),m=Kt(t,r+4),C=Kt(t,r+6),S=Kt(t,r+8),B=Kt(t,r+10),R=Kt(t,r+12),L=Kt(t,r+14),O=s[0]+(g&8191),M=s[1]+((g>>>13|v<<3)&8191),U=s[2]+((v>>>10|m<<6)&8191),q=s[3]+((m>>>7|C<<9)&8191),z=s[4]+((C>>>4|S<<12)&8191),Z=s[5]+(S>>>1&8191),A=s[6]+((S>>>14|B<<2)&8191),N=s[7]+((B>>>11|R<<5)&8191),T=s[8]+((R>>>8|L<<8)&8191),_=s[9]+(L>>>5|i),w=0,k=w+O*a+M*(5*y)+U*(5*d)+q*(5*p)+z*(5*x);w=k>>>13,k&=8191,k+=Z*(5*l)+A*(5*h)+N*(5*u)+T*(5*f)+_*(5*c),w+=k>>>13,k&=8191;let K=w+O*c+M*a+U*(5*y)+q*(5*d)+z*(5*p);w=K>>>13,K&=8191,K+=Z*(5*x)+A*(5*l)+N*(5*h)+T*(5*u)+_*(5*f),w+=K>>>13,K&=8191;let F=w+O*f+M*c+U*a+q*(5*y)+z*(5*d);w=F>>>13,F&=8191,F+=Z*(5*p)+A*(5*x)+N*(5*l)+T*(5*h)+_*(5*u),w+=F>>>13,F&=8191;let W=w+O*u+M*f+U*c+q*a+z*(5*y);w=W>>>13,W&=8191,W+=Z*(5*d)+A*(5*p)+N*(5*x)+T*(5*l)+_*(5*h),w+=W>>>13,W&=8191;let $=w+O*h+M*u+U*f+q*c+z*a;w=$>>>13,$&=8191,$+=Z*(5*y)+A*(5*d)+N*(5*p)+T*(5*x)+_*(5*l),w+=$>>>13,$&=8191;let et=w+O*l+M*h+U*u+q*f+z*c;w=et>>>13,et&=8191,et+=Z*a+A*(5*y)+N*(5*d)+T*(5*p)+_*(5*x),w+=et>>>13,et&=8191;let X=w+O*x+M*l+U*h+q*u+z*f;w=X>>>13,X&=8191,X+=Z*c+A*a+N*(5*y)+T*(5*d)+_*(5*p),w+=X>>>13,X&=8191;let J=w+O*p+M*x+U*l+q*h+z*u;w=J>>>13,J&=8191,J+=Z*f+A*c+N*a+T*(5*y)+_*(5*d),w+=J>>>13,J&=8191;let lt=w+O*d+M*p+U*x+q*l+z*h;w=lt>>>13,lt&=8191,lt+=Z*u+A*f+N*c+T*a+_*(5*y),w+=lt>>>13,lt&=8191;let ut=w+O*y+M*d+U*p+q*x+z*l;w=ut>>>13,ut&=8191,ut+=Z*h+A*u+N*f+T*c+_*a,w+=ut>>>13,ut&=8191,w=(w<<2)+w|0,w=w+k|0,k=w&8191,w=w>>>13,K+=w,s[0]=k,s[1]=K,s[2]=F,s[3]=W,s[4]=$,s[5]=et,s[6]=X,s[7]=J,s[8]=lt,s[9]=ut}finalize(){let{h:t,pad:r}=this,n=new Uint16Array(10),i=t[1]>>>13;t[1]&=8191;for(let a=2;a<10;a++)t[a]+=i,i=t[a]>>>13,t[a]&=8191;t[0]+=i*5,i=t[0]>>>13,t[0]&=8191,t[1]+=i,i=t[1]>>>13,t[1]&=8191,t[2]+=i,n[0]=t[0]+5,i=n[0]>>>13,n[0]&=8191;for(let a=1;a<10;a++)n[a]=t[a]+i,i=n[a]>>>13,n[a]&=8191;n[9]-=8192;let s=(i^1)-1;for(let a=0;a<10;a++)n[a]&=s;s=~s;for(let a=0;a<10;a++)t[a]=t[a]&s|n[a];t[0]=(t[0]|t[1]<<13)&65535,t[1]=(t[1]>>>3|t[2]<<10)&65535,t[2]=(t[2]>>>6|t[3]<<7)&65535,t[3]=(t[3]>>>9|t[4]<<4)&65535,t[4]=(t[4]>>>12|t[5]<<1|t[6]<<14)&65535,t[5]=(t[6]>>>2|t[7]<<11)&65535,t[6]=(t[7]>>>5|t[8]<<8)&65535,t[7]=(t[8]>>>8|t[9]<<5)&65535;let o=t[0]+r[0];t[0]=o&65535;for(let a=1;a<8;a++)o=(t[a]+r[a]|0)+(o>>>16)|0,t[a]=o&65535}update(t){rs(this);let{buffer:r,blockLen:n}=this;t=Hn(t);let i=t.length;for(let s=0;s>>0,t[s++]=n[o]>>>8;return t}digest(){let{buffer:t,outputLen:r}=this;this.digestInto(t);let n=t.slice(0,r);return this.destroy(),n}};function Lu(e){let t=(n,i)=>e(i).update(Hn(n)).digest(),r=e(new Uint8Array(32));return t.outputLen=r.outputLen,t.blockLen=r.blockLen,t.create=n=>e(n),t}var Ba=Lu(e=>new ns(e));var Ru=Fn("expand 16-byte k"),Nu=Fn("expand 32-byte k"),Du=Be(Ru),Pu=Be(Nu);function G(e,t){return e<>>32-t}function is(e){return e.byteOffset%4===0}var zn=64,ku=16,Ca=2**32-1,Aa=new Uint32Array;function Uu(e,t,r,n,i,s,o,a){let c=i.length,f=new Uint8Array(zn),u=Be(f),h=is(i)&&is(s),l=h?Be(i):Aa,x=h?Be(s):Aa;for(let p=0;p=Ca)throw new Error("arx: counter overflow");let d=Math.min(zn,c-p);if(h&&d===zn){let y=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let g=0,v;g{Sr(a),Sr(c),Sr(f);let l=f.length;if(u||(u=new Uint8Array(l)),Sr(u),qn(h),h<0||h>=Ca)throw new Error("arx: counter overflow");if(u.length0;)x.pop().fill(0);return u}}function _a(e,t,r,n,i,s=20){let o=e[0],a=e[1],c=e[2],f=e[3],u=t[0],h=t[1],l=t[2],x=t[3],p=t[4],d=t[5],y=t[6],g=t[7],v=i,m=r[0],C=r[1],S=r[2],B=o,R=a,L=c,O=f,M=u,U=h,q=l,z=x,Z=p,A=d,N=y,T=g,_=v,w=m,k=C,K=S;for(let W=0;W{e.update(t);let r=t.length%16;r&&e.update(Vu.subarray(r))},Fu=new Uint8Array(32);function Ta(e,t,r,n,i){let s=e(t,r,Fu),o=Ba.create(s);i&&Ia(o,i),Ia(o,n);let a=new Uint8Array(16),c=va(a);ts(c,0,BigInt(i?i.length:0),!0),ts(c,8,BigInt(n.length),!0),o.update(a);let f=o.digest();return s.fill(0),f}var La=e=>(t,r,n)=>(Je(t,32),Je(r),{encrypt:(s,o)=>{let a=s.length,c=a+16;o?Je(o,c):o=new Uint8Array(c),e(t,r,s,o,1);let f=Ta(e,t,r,o.subarray(0,-16),n);return o.set(f,a),o},decrypt:(s,o)=>{let a=s.length,c=a-16;if(a<16)throw new Error("encrypted data must be at least 16 bytes");o?Je(o,c):o=new Uint8Array(c);let f=s.subarray(0,-16),u=s.subarray(-16),h=Ta(e,t,r,f,n);if(!Ea(u,h))throw new Error("invalid tag");return e(t,r,f,o,1),o}}),os=ji({blockSize:64,nonceLength:12,tagLength:16},La(Ou)),Bx=ji({blockSize:64,nonceLength:24,tagLength:16},La(Mu));function Gn(e){if(!Number.isSafeInteger(e)||e<0)throw new Error(`Wrong positive integer: ${e}`)}function as(e,...t){if(!(e instanceof Uint8Array))throw new Error("Expected Uint8Array");if(t.length>0&&!t.includes(e.length))throw new Error(`Expected Uint8Array of length ${t}, not of length=${e.length}`)}function jr(e){if(typeof e!="function"||typeof e.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");Gn(e.outputLen),Gn(e.blockLen)}function Br(e,t=!0){if(e.destroyed)throw new Error("Hash instance has been destroyed");if(t&&e.finished)throw new Error("Hash#digest() has already been called")}function Ra(e,t){as(e);let r=t.outputLen;if(e.lengthe instanceof Uint8Array;var Wn=e=>new DataView(e.buffer,e.byteOffset,e.byteLength),ie=(e,t)=>e<<32-t|e>>>t,Hu=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!Hu)throw new Error("Non little-endian hardware is not supported");function cs(e){if(typeof e!="string")throw new Error(`utf8ToBytes expected string, got ${typeof e}`);return new Uint8Array(new TextEncoder().encode(e))}function Ke(e){if(typeof e=="string"&&(e=cs(e)),!Na(e))throw new Error(`expected Uint8Array, got ${typeof e}`);return e}function $n(...e){let t=new Uint8Array(e.reduce((n,i)=>n+i.length,0)),r=0;return e.forEach(n=>{if(!Na(n))throw new Error("Uint8Array expected");t.set(n,r),r+=n.length}),t}var Ar=class{clone(){return this._cloneInto()}},_x={}.toString;function Zn(e){let t=n=>e().update(Ke(n)).digest(),r=e();return t.outputLen=r.outputLen,t.blockLen=r.blockLen,t.create=()=>e(),t}function je(e=32){if(Yn&&typeof Yn.getRandomValues=="function")return Yn.getRandomValues(new Uint8Array(e));throw new Error("crypto.getRandomValues must be defined")}function qu(e,t,r,n){if(typeof e.setBigUint64=="function")return e.setBigUint64(t,r,n);let i=BigInt(32),s=BigInt(4294967295),o=Number(r>>i&s),a=Number(r&s),c=n?4:0,f=n?0:4;e.setUint32(t+c,o,n),e.setUint32(t+f,a,n)}var Cr=class extends Ar{constructor(t,r,n,i){super(),this.blockLen=t,this.outputLen=r,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(t),this.view=Wn(this.buffer)}update(t){Br(this);let{view:r,buffer:n,blockLen:i}=this;t=Ke(t);let s=t.length;for(let o=0;oi-o&&(this.process(n,0),o=0);for(let h=o;hu.length)throw new Error("_sha2: outputLen bigger than state");for(let h=0;h>fs&Xn)}:{h:Number(e>>fs&Xn)|0,l:Number(e&Xn)|0}}function zu(e,t=!1){let r=new Uint32Array(e.length),n=new Uint32Array(e.length);for(let i=0;iBigInt(e>>>0)<>>0),Yu=(e,t,r)=>e>>>r,Wu=(e,t,r)=>e<<32-r|t>>>r,$u=(e,t,r)=>e>>>r|t<<32-r,Zu=(e,t,r)=>e<<32-r|t>>>r,Xu=(e,t,r)=>e<<64-r|t>>>r-32,Qu=(e,t,r)=>e>>>r-32|t<<64-r,Ju=(e,t)=>t,ju=(e,t)=>e,th=(e,t,r)=>e<>>32-r,eh=(e,t,r)=>t<>>32-r,rh=(e,t,r)=>t<>>64-r,nh=(e,t,r)=>e<>>64-r;function ih(e,t,r,n){let i=(t>>>0)+(n>>>0);return{h:e+r+(i/2**32|0)|0,l:i|0}}var sh=(e,t,r)=>(e>>>0)+(t>>>0)+(r>>>0),oh=(e,t,r,n)=>t+r+n+(e/2**32|0)|0,ah=(e,t,r,n)=>(e>>>0)+(t>>>0)+(r>>>0)+(n>>>0),ch=(e,t,r,n,i)=>t+r+n+i+(e/2**32|0)|0,fh=(e,t,r,n,i)=>(e>>>0)+(t>>>0)+(r>>>0)+(n>>>0)+(i>>>0),uh=(e,t,r,n,i,s)=>t+r+n+i+s+(e/2**32|0)|0;var hh={fromBig:Da,split:zu,toBig:Gu,shrSH:Yu,shrSL:Wu,rotrSH:$u,rotrSL:Zu,rotrBH:Xu,rotrBL:Qu,rotr32H:Ju,rotr32L:ju,rotlSH:th,rotlSL:eh,rotlBH:rh,rotlBL:nh,add:ih,add3L:sh,add3H:oh,add4L:ah,add4H:ch,add5H:uh,add5L:fh},j=hh;var[lh,ph]=j.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(e=>BigInt(e))),Oe=new Uint32Array(80),Me=new Uint32Array(80),us=class extends Cr{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){let{Ah:t,Al:r,Bh:n,Bl:i,Ch:s,Cl:o,Dh:a,Dl:c,Eh:f,El:u,Fh:h,Fl:l,Gh:x,Gl:p,Hh:d,Hl:y}=this;return[t,r,n,i,s,o,a,c,f,u,h,l,x,p,d,y]}set(t,r,n,i,s,o,a,c,f,u,h,l,x,p,d,y){this.Ah=t|0,this.Al=r|0,this.Bh=n|0,this.Bl=i|0,this.Ch=s|0,this.Cl=o|0,this.Dh=a|0,this.Dl=c|0,this.Eh=f|0,this.El=u|0,this.Fh=h|0,this.Fl=l|0,this.Gh=x|0,this.Gl=p|0,this.Hh=d|0,this.Hl=y|0}process(t,r){for(let m=0;m<16;m++,r+=4)Oe[m]=t.getUint32(r),Me[m]=t.getUint32(r+=4);for(let m=16;m<80;m++){let C=Oe[m-15]|0,S=Me[m-15]|0,B=j.rotrSH(C,S,1)^j.rotrSH(C,S,8)^j.shrSH(C,S,7),R=j.rotrSL(C,S,1)^j.rotrSL(C,S,8)^j.shrSL(C,S,7),L=Oe[m-2]|0,O=Me[m-2]|0,M=j.rotrSH(L,O,19)^j.rotrBH(L,O,61)^j.shrSH(L,O,6),U=j.rotrSL(L,O,19)^j.rotrBL(L,O,61)^j.shrSL(L,O,6),q=j.add4L(R,U,Me[m-7],Me[m-16]),z=j.add4H(q,B,M,Oe[m-7],Oe[m-16]);Oe[m]=z|0,Me[m]=q|0}let{Ah:n,Al:i,Bh:s,Bl:o,Ch:a,Cl:c,Dh:f,Dl:u,Eh:h,El:l,Fh:x,Fl:p,Gh:d,Gl:y,Hh:g,Hl:v}=this;for(let m=0;m<80;m++){let C=j.rotrSH(h,l,14)^j.rotrSH(h,l,18)^j.rotrBH(h,l,41),S=j.rotrSL(h,l,14)^j.rotrSL(h,l,18)^j.rotrBL(h,l,41),B=h&x^~h&d,R=l&p^~l&y,L=j.add5L(v,S,R,ph[m],Me[m]),O=j.add5H(L,g,C,B,lh[m],Oe[m]),M=L|0,U=j.rotrSH(n,i,28)^j.rotrBH(n,i,34)^j.rotrBH(n,i,39),q=j.rotrSL(n,i,28)^j.rotrBL(n,i,34)^j.rotrBL(n,i,39),z=n&s^n&a^s&a,Z=i&o^i&c^o&c;g=d|0,v=y|0,d=x|0,y=p|0,x=h|0,p=l|0,{h,l}=j.add(f|0,u|0,O|0,M|0),f=a|0,u=c|0,a=s|0,c=o|0,s=n|0,o=i|0;let A=j.add3L(M,q,Z);n=j.add3H(A,O,U,z),i=A|0}({h:n,l:i}=j.add(this.Ah|0,this.Al|0,n|0,i|0)),{h:s,l:o}=j.add(this.Bh|0,this.Bl|0,s|0,o|0),{h:a,l:c}=j.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:f,l:u}=j.add(this.Dh|0,this.Dl|0,f|0,u|0),{h,l}=j.add(this.Eh|0,this.El|0,h|0,l|0),{h:x,l:p}=j.add(this.Fh|0,this.Fl|0,x|0,p|0),{h:d,l:y}=j.add(this.Gh|0,this.Gl|0,d|0,y|0),{h:g,l:v}=j.add(this.Hh|0,this.Hl|0,g|0,v|0),this.set(n,i,s,o,a,c,f,u,h,l,x,p,d,y,g,v)}roundClean(){Oe.fill(0),Me.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var hs=Zn(()=>new us);var jn={};Lt(jn,{bitGet:()=>vh,bitLen:()=>bh,bitMask:()=>tn,bitSet:()=>wh,bytesToHex:()=>Ae,bytesToNumberBE:()=>Ce,bytesToNumberLE:()=>se,concatBytes:()=>Te,createHmacDrbg:()=>ds,ensureBytes:()=>yt,equalBytes:()=>gh,hexToBytes:()=>tr,hexToNumber:()=>ps,numberToBytesBE:()=>Ve,numberToBytesLE:()=>Ie,numberToHexUnpadded:()=>Ua,numberToVarBytesBE:()=>xh,utf8ToBytes:()=>mh,validateObject:()=>Jt});var ka=BigInt(0),Qn=BigInt(1),dh=BigInt(2),Jn=e=>e instanceof Uint8Array,yh=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));function Ae(e){if(!Jn(e))throw new Error("Uint8Array expected");let t="";for(let r=0;rn+i.length,0)),r=0;return e.forEach(n=>{if(!Jn(n))throw new Error("Uint8Array expected");t.set(n,r),r+=n.length}),t}function gh(e,t){if(e.length!==t.length)return!1;for(let r=0;rka;e>>=Qn,t+=1);return t}function vh(e,t){return e>>BigInt(t)&Qn}var wh=(e,t,r)=>e|(r?Qn:ka)<(dh<new Uint8Array(e),Pa=e=>Uint8Array.from(e);function ds(e,t,r){if(typeof e!="number"||e<2)throw new Error("hashLen must be a number");if(typeof t!="number"||t<2)throw new Error("qByteLen must be a number");if(typeof r!="function")throw new Error("hmacFn must be a function");let n=ls(e),i=ls(e),s=0,o=()=>{n.fill(1),i.fill(0),s=0},a=(...h)=>r(i,n,...h),c=(h=ls())=>{i=a(Pa([0]),h),n=a(),h.length!==0&&(i=a(Pa([1]),h),n=a())},f=()=>{if(s++>=1e3)throw new Error("drbg: tried 1000 values");let h=0,l=[];for(;h{o(),c(h);let x;for(;!(x=l(f()));)c();return o(),x}}var Eh={bigint:e=>typeof e=="bigint",function:e=>typeof e=="function",boolean:e=>typeof e=="boolean",string:e=>typeof e=="string",stringOrUint8Array:e=>typeof e=="string"||e instanceof Uint8Array,isSafeInteger:e=>Number.isSafeInteger(e),array:e=>Array.isArray(e),field:(e,t)=>t.Fp.isValid(e),hash:e=>typeof e=="function"&&Number.isSafeInteger(e.outputLen)};function Jt(e,t,r={}){let n=(i,s,o)=>{let a=Eh[s];if(typeof a!="function")throw new Error(`Invalid validator "${s}", expected function`);let c=e[i];if(!(o&&c===void 0)&&!a(c,e))throw new Error(`Invalid param ${String(i)}=${c} (${typeof c}), expected ${s}`)};for(let[i,s]of Object.entries(t))n(i,s,!1);for(let[i,s]of Object.entries(r))n(i,s,!0);return e}var _t=BigInt(0),bt=BigInt(1),er=BigInt(2),Sh=BigInt(3),ys=BigInt(4),Ka=BigInt(5),Oa=BigInt(8),Bh=BigInt(9),Ah=BigInt(16);function at(e,t){let r=e%t;return r>=_t?r:t+r}function xs(e,t,r){if(r<=_t||t<_t)throw new Error("Expected power/modulo > 0");if(r===bt)return _t;let n=bt;for(;t>_t;)t&bt&&(n=n*e%r),e=e*e%r,t>>=bt;return n}function xt(e,t,r){let n=e;for(;t-- >_t;)n*=n,n%=r;return n}function ti(e,t){if(e===_t||t<=_t)throw new Error(`invert: expected positive integers, got n=${e} mod=${t}`);let r=at(e,t),n=t,i=_t,s=bt,o=bt,a=_t;for(;r!==_t;){let f=n/r,u=n%r,h=i-o*f,l=s-a*f;n=r,r=u,i=o,s=a,o=h,a=l}if(n!==bt)throw new Error("invert: does not exist");return at(i,t)}function Ch(e){let t=(e-bt)/er,r,n,i;for(r=e-bt,n=0;r%er===_t;r/=er,n++);for(i=er;i(at(e,t)&bt)===bt,Th=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function gs(e){let t={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},r=Th.reduce((n,i)=>(n[i]="function",n),t);return Jt(e,r)}function _h(e,t,r){if(r<_t)throw new Error("Expected power > 0");if(r===_t)return e.ONE;if(r===bt)return t;let n=e.ONE,i=t;for(;r>_t;)r&bt&&(n=e.mul(n,i)),i=e.sqr(i),r>>=bt;return n}function Lh(e,t){let r=new Array(t.length),n=t.reduce((s,o,a)=>e.is0(o)?s:(r[a]=s,e.mul(s,o)),e.ONE),i=e.inv(n);return t.reduceRight((s,o,a)=>e.is0(o)?s:(r[a]=e.mul(s,r[a]),e.mul(s,o)),i),r}function ms(e,t){let r=t!==void 0?t:e.toString(2).length,n=Math.ceil(r/8);return{nBitLength:r,nByteLength:n}}function ei(e,t,r=!1,n={}){if(e<=_t)throw new Error(`Expected Field ORDER > 0, got ${e}`);let{nBitLength:i,nByteLength:s}=ms(e,t);if(s>2048)throw new Error("Field lengths over 2048 bytes are not supported");let o=Ih(e),a=Object.freeze({ORDER:e,BITS:i,BYTES:s,MASK:tn(i),ZERO:_t,ONE:bt,create:c=>at(c,e),isValid:c=>{if(typeof c!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof c}`);return _t<=c&&cc===_t,isOdd:c=>(c&bt)===bt,neg:c=>at(-c,e),eql:(c,f)=>c===f,sqr:c=>at(c*c,e),add:(c,f)=>at(c+f,e),sub:(c,f)=>at(c-f,e),mul:(c,f)=>at(c*f,e),pow:(c,f)=>_h(a,c,f),div:(c,f)=>at(c*ti(f,e),e),sqrN:c=>c*c,addN:(c,f)=>c+f,subN:(c,f)=>c-f,mulN:(c,f)=>c*f,inv:c=>ti(c,e),sqrt:n.sqrt||(c=>o(a,c)),invertBatch:c=>Lh(a,c),cmov:(c,f,u)=>u?f:c,toBytes:c=>r?Ie(c,s):Ve(c,s),fromBytes:c=>{if(c.length!==s)throw new Error(`Fp.fromBytes: expected ${s}, got ${c.length}`);return r?se(c):Ce(c)}});return Object.freeze(a)}function Va(e,t){if(!e.isOdd)throw new Error("Field doesn't have isOdd");let r=e.sqrt(t);return e.isOdd(r)?e.neg(r):r}function Fa(e){if(typeof e!="bigint")throw new Error("field order must be bigint");let t=e.toString(2).length;return Math.ceil(t/8)}function bs(e){let t=Fa(e);return t+Math.ceil(t/2)}function Ha(e,t,r=!1){let n=e.length,i=Fa(t),s=bs(t);if(n<16||n1024)throw new Error(`expected ${s}-1024 bytes of input, got ${n}`);let o=r?Ce(e):se(e),a=at(o,t-bt)+bt;return r?Ie(a,i):Ve(a,i)}var Nh=BigInt(0),vs=BigInt(1);function ri(e,t){let r=(i,s)=>{let o=s.negate();return i?o:s},n=i=>{let s=Math.ceil(t/i)+1,o=2**(i-1);return{windows:s,windowSize:o}};return{constTimeNegate:r,unsafeLadder(i,s){let o=e.ZERO,a=i;for(;s>Nh;)s&vs&&(o=o.add(a)),a=a.double(),s>>=vs;return o},precomputeWindow(i,s){let{windows:o,windowSize:a}=n(s),c=[],f=i,u=f;for(let h=0;h>=x,y>c&&(y-=l,o+=vs);let g=d,v=d+Math.abs(y)-1,m=p%2!==0,C=y<0;y===0?u=u.add(r(m,s[g])):f=f.add(r(C,s[v]))}return{p:f,f:u}},wNAFCached(i,s,o,a){let c=i._WINDOW_SIZE||1,f=s.get(i);return f||(f=this.precomputeWindow(i,c),c!==1&&s.set(i,a(f))),this.wNAF(c,f,o)}}}function en(e){return gs(e.Fp),Jt(e,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...ms(e.n,e.nBitLength),...e,p:e.Fp.ORDER})}var oe=BigInt(0),Xt=BigInt(1),ni=BigInt(2),Dh=BigInt(8),Ph={zip215:!0};function kh(e){let t=en(e);return Jt(e,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...t})}function ii(e){let t=kh(e),{Fp:r,n,prehash:i,hash:s,randomBytes:o,nByteLength:a,h:c}=t,f=ni<{try{return{isValid:!0,value:r.sqrt(_*r.inv(w))}}catch{return{isValid:!1,value:oe}}}),l=t.adjustScalarBytes||(_=>_),x=t.domain||((_,w,k)=>{if(w.length||k)throw new Error("Contexts/pre-hash are not supported");return _}),p=_=>typeof _=="bigint"&&oe<_,d=(_,w)=>p(_)&&p(w)&&__===oe||d(_,f);function g(_,w){if(d(_,w))return _;throw new Error(`Expected valid scalar < ${w}, got ${typeof _} ${_}`)}function v(_){return _===oe?_:g(_,n)}let m=new Map;function C(_){if(!(_ instanceof S))throw new Error("ExtendedPoint expected")}class S{constructor(w,k,K,F){if(this.ex=w,this.ey=k,this.ez=K,this.et=F,!y(w))throw new Error("x required");if(!y(k))throw new Error("y required");if(!y(K))throw new Error("z required");if(!y(F))throw new Error("t required")}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(w){if(w instanceof S)throw new Error("extended point not allowed");let{x:k,y:K}=w||{};if(!y(k)||!y(K))throw new Error("invalid affine point");return new S(k,K,Xt,u(k*K))}static normalizeZ(w){let k=r.invertBatch(w.map(K=>K.ez));return w.map((K,F)=>K.toAffine(k[F])).map(S.fromAffine)}_setWindowSize(w){this._WINDOW_SIZE=w,m.delete(this)}assertValidity(){let{a:w,d:k}=t;if(this.is0())throw new Error("bad point: ZERO");let{ex:K,ey:F,ez:W,et:$}=this,et=u(K*K),X=u(F*F),J=u(W*W),lt=u(J*J),ut=u(et*w),kt=u(J*u(ut+X)),Ut=u(lt+u(k*u(et*X)));if(kt!==Ut)throw new Error("bad point: equation left != right (1)");let Tt=u(K*F),Mt=u(W*$);if(Tt!==Mt)throw new Error("bad point: equation left != right (2)")}equals(w){C(w);let{ex:k,ey:K,ez:F}=this,{ex:W,ey:$,ez:et}=w,X=u(k*et),J=u(W*F),lt=u(K*et),ut=u($*F);return X===J&<===ut}is0(){return this.equals(S.ZERO)}negate(){return new S(u(-this.ex),this.ey,this.ez,u(-this.et))}double(){let{a:w}=t,{ex:k,ey:K,ez:F}=this,W=u(k*k),$=u(K*K),et=u(ni*u(F*F)),X=u(w*W),J=k+K,lt=u(u(J*J)-W-$),ut=X+$,kt=ut-et,Ut=X-$,Tt=u(lt*kt),Mt=u(ut*Ut),we=u(lt*Ut),Xe=u(kt*ut);return new S(Tt,Mt,Xe,we)}add(w){C(w);let{a:k,d:K}=t,{ex:F,ey:W,ez:$,et}=this,{ex:X,ey:J,ez:lt,et:ut}=w;if(k===BigInt(-1)){let Qo=u((W-F)*(J+X)),Jo=u((W+F)*(J-X)),Vi=u(Jo-Qo);if(Vi===oe)return this.double();let jo=u($*ni*ut),ta=u(et*ni*lt),ea=ta+jo,ra=Jo+Qo,na=ta-jo,eu=u(ea*Vi),ru=u(ra*na),nu=u(ea*na),iu=u(Vi*ra);return new S(eu,ru,iu,nu)}let kt=u(F*X),Ut=u(W*J),Tt=u(et*K*ut),Mt=u($*lt),we=u((F+W)*(X+J)-kt-Ut),Xe=Mt-Tt,Xr=Mt+Tt,Xo=u(Ut-k*kt),Qf=u(we*Xe),Jf=u(Xr*Xo),jf=u(we*Xo),tu=u(Xe*Xr);return new S(Qf,Jf,tu,jf)}subtract(w){return this.add(w.negate())}wNAF(w){return L.wNAFCached(this,m,w,S.normalizeZ)}multiply(w){let{p:k,f:K}=this.wNAF(g(w,n));return S.normalizeZ([k,K])[0]}multiplyUnsafe(w){let k=v(w);return k===oe?R:this.equals(R)||k===Xt?this:this.equals(B)?this.wNAF(k).p:L.unsafeLadder(this,k)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return L.unsafeLadder(this,n).is0()}toAffine(w){let{ex:k,ey:K,ez:F}=this,W=this.is0();w==null&&(w=W?Dh:r.inv(F));let $=u(k*w),et=u(K*w),X=u(F*w);if(W)return{x:oe,y:Xt};if(X!==Xt)throw new Error("invZ was invalid");return{x:$,y:et}}clearCofactor(){let{h:w}=t;return w===Xt?this:this.multiplyUnsafe(w)}static fromHex(w,k=!1){let{d:K,a:F}=t,W=r.BYTES;w=yt("pointHex",w,W);let $=w.slice(),et=w[W-1];$[W-1]=et&-129;let X=se($);X===oe||(k?g(X,f):g(X,r.ORDER));let J=u(X*X),lt=u(J-Xt),ut=u(K*J-F),{isValid:kt,value:Ut}=h(lt,ut);if(!kt)throw new Error("Point.fromHex: invalid y coordinate");let Tt=(Ut&Xt)===Xt,Mt=(et&128)!==0;if(!k&&Ut===oe&&Mt)throw new Error("Point.fromHex: x=0 and x_0=1");return Mt!==Tt&&(Ut=u(-Ut)),S.fromAffine({x:Ut,y:X})}static fromPrivateKey(w){return U(w).point}toRawBytes(){let{x:w,y:k}=this.toAffine(),K=Ie(k,r.BYTES);return K[K.length-1]|=w&Xt?128:0,K}toHex(){return Ae(this.toRawBytes())}}S.BASE=new S(t.Gx,t.Gy,Xt,u(t.Gx*t.Gy)),S.ZERO=new S(oe,Xt,Xt,oe);let{BASE:B,ZERO:R}=S,L=ri(S,a*8);function O(_){return at(_,n)}function M(_){return O(se(_))}function U(_){let w=a;_=yt("private key",_,w);let k=yt("hashed private key",s(_),2*w),K=l(k.slice(0,w)),F=k.slice(w,2*w),W=M(K),$=B.multiply(W),et=$.toRawBytes();return{head:K,prefix:F,scalar:W,point:$,pointBytes:et}}function q(_){return U(_).pointBytes}function z(_=new Uint8Array,...w){let k=Te(...w);return M(s(x(k,yt("context",_),!!i)))}function Z(_,w,k={}){_=yt("message",_),i&&(_=i(_));let{prefix:K,scalar:F,pointBytes:W}=U(w),$=z(k.context,K,_),et=B.multiply($).toRawBytes(),X=z(k.context,et,W,_),J=O($+X*F);v(J);let lt=Te(et,Ie(J,r.BYTES));return yt("result",lt,a*2)}let A=Ph;function N(_,w,k,K=A){let{context:F,zip215:W}=K,$=r.BYTES;_=yt("signature",_,2*$),w=yt("message",w),i&&(w=i(w));let et=se(_.slice($,2*$)),X,J,lt;try{X=S.fromHex(k,W),J=S.fromHex(_.slice(0,$),W),lt=B.multiplyUnsafe(et)}catch{return!1}if(!W&&X.isSmallOrder())return!1;let ut=z(F,J.toRawBytes(),X.toRawBytes(),w);return J.add(X.multiplyUnsafe(ut)).subtract(lt).clearCofactor().equals(S.ZERO)}return B._setWindowSize(8),{CURVE:t,getPublicKey:q,sign:Z,verify:N,ExtendedPoint:S,utils:{getExtendedPublicKey:U,randomPrivateKey:()=>o(r.BYTES),precompute(_=8,w=S.BASE){return w._setWindowSize(_),w.multiply(BigInt(3)),w}}}}var rn=BigInt(0),ws=BigInt(1);function Uh(e){return Jt(e,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...e})}function qa(e){let t=Uh(e),{P:r}=t,n=m=>at(m,r),i=t.montgomeryBits,s=Math.ceil(i/8),o=t.nByteLength,a=t.adjustScalarBytes||(m=>m),c=t.powPminus2||(m=>xs(m,r-BigInt(2),r));function f(m,C,S){let B=n(m*(C-S));return C=n(C-B),S=n(S+B),[C,S]}function u(m){if(typeof m=="bigint"&&rn<=m&&m=rn;A--){let N=B>>A&ws;q^=N,z=f(q,L,M),L=z[0],M=z[1],z=f(q,O,U),O=z[0],U=z[1],q=N;let T=L+O,_=n(T*T),w=L-O,k=n(w*w),K=_-k,F=M+U,W=M-U,$=n(W*T),et=n(F*w),X=$+et,J=$-et;M=n(X*X),U=n(R*n(J*J)),L=n(_*k),O=n(K*(_+n(h*K)))}z=f(q,L,M),L=z[0],M=z[1],z=f(q,O,U),O=z[0],U=z[1];let Z=c(O);return n(L*Z)}function x(m){return Ie(n(m),s)}function p(m){let C=yt("u coordinate",m,s);return o===s&&(C[o-1]&=127),se(C)}function d(m){let C=yt("scalar",m);if(C.length!==s&&C.length!==o)throw new Error(`Expected ${s} or ${o} bytes, got ${C.length}`);return se(a(C))}function y(m,C){let S=p(C),B=d(m),R=l(S,B);if(R===rn)throw new Error("Invalid private or public key received");return x(R)}let g=x(t.Gu);function v(m){return y(m,g)}return{scalarMult:y,scalarMultBase:v,getSharedSecret:(m,C)=>y(m,C),getPublicKey:m=>v(m),utils:{randomPrivateKey:()=>t.randomBytes(t.nByteLength)},GuBytes:g}}var nn=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),za=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),eg=BigInt(0),Kh=BigInt(1),Es=BigInt(2),Oh=BigInt(5),Ga=BigInt(10),Mh=BigInt(20),Vh=BigInt(40),Ya=BigInt(80);function Wa(e){let t=nn,n=e*e%t*e%t,i=xt(n,Es,t)*n%t,s=xt(i,Kh,t)*e%t,o=xt(s,Oh,t)*s%t,a=xt(o,Ga,t)*o%t,c=xt(a,Mh,t)*a%t,f=xt(c,Vh,t)*c%t,u=xt(f,Ya,t)*f%t,h=xt(u,Ya,t)*f%t,l=xt(h,Ga,t)*o%t;return{pow_p_5_8:xt(l,Es,t)*e%t,b2:n}}function $a(e){return e[0]&=248,e[31]&=127,e[31]|=64,e}function Fh(e,t){let r=nn,n=at(t*t*t,r),i=at(n*n*t,r),s=Wa(e*i).pow_p_5_8,o=at(e*n*s,r),a=at(t*o*o,r),c=o,f=at(o*za,r),u=a===e,h=a===at(-e,r),l=a===at(-e*za,r);return u&&(o=c),(h||l)&&(o=f),Ma(o,r)&&(o=at(-o,r)),{isValid:u||h,value:o}}var _e=ei(nn,void 0,!0),Ss={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:_e,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:BigInt(8),Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:hs,randomBytes:je,adjustScalarBytes:$a,uvRatio:Fh},Ir=ii(Ss);function Za(e,t,r){if(t.length>255)throw new Error("Context is too big");return $n(cs("SigEd25519 no Ed25519 collisions"),new Uint8Array([r?1:0,t.length]),t,e)}var rg=ii({...Ss,domain:Za}),ng=ii({...Ss,domain:Za,prehash:hs}),sn=qa({P:nn,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:e=>{let t=nn,{pow_p_5_8:r,b2:n}=Wa(e);return at(xt(r,BigInt(3),t)*n,t)},adjustScalarBytes:$a,randomBytes:je});var Hh=(_e.ORDER+BigInt(3))/BigInt(8),ig=_e.pow(Es,Hh),sg=_e.sqrt(_e.neg(_e.ONE)),og=(_e.ORDER-BigInt(5))/BigInt(8),ag=BigInt(486662);var cg=Va(_e,_e.neg(BigInt(486664)));var fg=BigInt("25063068953384623474111414158702152701244531502492656460079210482610430750235"),ug=BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578"),hg=BigInt("1159843021668779879193775521855586647937357759715417654439879720876111806838"),lg=BigInt("40440834346308536858101042469323190826248399146238708352240133220865137265952");var pg=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");var si=class extends Ar{constructor(t,r){super(),this.finished=!1,this.destroyed=!1,jr(t);let n=Ke(r);if(this.iHash=t.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let i=this.blockLen,s=new Uint8Array(i);s.set(n.length>i?t.create().update(n).digest():n);for(let o=0;onew si(e,t).update(r).digest();Tr.create=(e,t)=>new si(e,t);function Qa(e,t,r){return jr(e),r===void 0&&(r=new Uint8Array(e.outputLen)),Tr(e,Ke(r),Ke(t))}var Bs=new Uint8Array([0]),Xa=new Uint8Array;function Ja(e,t,r,n=32){if(jr(e),Gn(n),n>255*e.outputLen)throw new Error("Length should be <= 255*HashLen");let i=Math.ceil(n/e.outputLen);r===void 0&&(r=Xa);let s=new Uint8Array(i*e.outputLen),o=Tr.create(e,t),a=o._cloneInto(),c=new Uint8Array(o.outputLen);for(let f=0;fe&t^~e&r,zh=(e,t,r)=>e&t^e&r^t&r,Gh=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Fe=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),He=new Uint32Array(64),As=class extends Cr{constructor(){super(64,32,8,!1),this.A=Fe[0]|0,this.B=Fe[1]|0,this.C=Fe[2]|0,this.D=Fe[3]|0,this.E=Fe[4]|0,this.F=Fe[5]|0,this.G=Fe[6]|0,this.H=Fe[7]|0}get(){let{A:t,B:r,C:n,D:i,E:s,F:o,G:a,H:c}=this;return[t,r,n,i,s,o,a,c]}set(t,r,n,i,s,o,a,c){this.A=t|0,this.B=r|0,this.C=n|0,this.D=i|0,this.E=s|0,this.F=o|0,this.G=a|0,this.H=c|0}process(t,r){for(let h=0;h<16;h++,r+=4)He[h]=t.getUint32(r,!1);for(let h=16;h<64;h++){let l=He[h-15],x=He[h-2],p=ie(l,7)^ie(l,18)^l>>>3,d=ie(x,17)^ie(x,19)^x>>>10;He[h]=d+He[h-7]+p+He[h-16]|0}let{A:n,B:i,C:s,D:o,E:a,F:c,G:f,H:u}=this;for(let h=0;h<64;h++){let l=ie(a,6)^ie(a,11)^ie(a,25),x=u+l+qh(a,c,f)+Gh[h]+He[h]|0,d=(ie(n,2)^ie(n,13)^ie(n,22))+zh(n,i,s)|0;u=f,f=c,c=a,a=o+x|0,o=s,s=i,i=n,n=x+d|0}n=n+this.A|0,i=i+this.B|0,s=s+this.C|0,o=o+this.D|0,a=a+this.E|0,c=c+this.F|0,f=f+this.G|0,u=u+this.H|0,this.set(n,i,s,o,a,c,f,u)}roundClean(){He.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var _r=Zn(()=>new As);var oi={hashSHA256(e){return _r(e.subarray())},getHKDF(e,t){let r=Qa(_r,t,e),i=Ja(_r,r,void 0,96),s=i.subarray(0,32),o=i.subarray(32,64),a=i.subarray(64,96);return[s,o,a]},generateX25519KeyPair(){let e=sn.utils.randomPrivateKey();return{publicKey:sn.getPublicKey(e),privateKey:e}},generateX25519KeyPairFromSeed(e){return{publicKey:sn.getPublicKey(e),privateKey:e}},generateX25519SharedKey(e,t){return sn.getSharedSecret(e.subarray(),t.subarray())},chaCha20Poly1305Encrypt(e,t,r,n){return os(n,t,r).encrypt(e.subarray())},chaCha20Poly1305Decrypt(e,t,r,n,i){return os(n,t,r).decrypt(e.subarray(),i)}};var ja=oi;var Lr=e=>{let t=Bt(2);return new DataView(t.buffer,t.byteOffset,t.byteLength).setUint16(0,e,!1),t};Lr.bytes=2;var on=e=>{if(e.length<2)throw RangeError("Could not decode int16BE");return e instanceof Uint8Array?new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1):e.getUint16(0)};on.bytes=2;function t0(e){return new At(e.ne,e.ciphertext)}function e0(e){return new At(e.ne,e.ns,e.ciphertext)}function r0(e){return new At(e.ns,e.ciphertext)}function n0(e){if(e.length<32)throw new Error("Cannot decode stage 0 MessageBuffer: length less than 32 bytes.");return{ne:e.subarray(0,32),ciphertext:e.subarray(32,e.length),ns:rt(0)}}function i0(e){if(e.length<80)throw new Error("Cannot decode stage 1 MessageBuffer: length less than 80 bytes.");return{ne:e.subarray(0,32),ns:e.subarray(32,80),ciphertext:e.subarray(80,e.length)}}function s0(e){if(e.length<48)throw new Error("Cannot decode stage 2 MessageBuffer: length less than 48 bytes.");return{ne:rt(0),ns:e.subarray(0,48),ciphertext:e.subarray(48,e.length)}}var a0=16;function c0(e,t){return async function*(r){for await(let n of r)for(let i=0;in.length&&(s=n.length);let o;n instanceof Uint8Array?o=e.encrypt(n.subarray(i,s),e.session):o=e.encrypt(n.sublist(i,s),e.session),t?.encryptedPackets.increment(),yield new At(Lr(o.byteLength),o)}}}function f0(e,t){return async function*(r){for await(let n of r)for(let i=0;in.length&&(s=n.length),s-a0wd});function xd(e,t){if(e.length>=255)throw new TypeError("Alphabet too long");for(var r=new Uint8Array(256),n=0;n>>0,C=new Uint8Array(m);g!==v;){for(var S=p[g],B=0,R=m-1;(S!==0||B>>0,C[R]=S%a>>>0,S=S/a>>>0;if(S!==0)throw new Error("Non-zero carry");y=B,g++}for(var L=m-y;L!==m&&C[L]===0;)L++;for(var O=c.repeat(d);L>>0,m=new Uint8Array(v);p[d];){var C=r[p.charCodeAt(d)];if(C===255)return;for(var S=0,B=v-1;(C!==0||S>>0,m[B]=C%256>>>0,C=C/256>>>0;if(C!==0)throw new Error("Non-zero carry");g=S,d++}if(p[d]!==" "){for(var R=v-g;R!==v&&m[R]===0;)R++;for(var L=new Uint8Array(y+(v-R)),O=y;R!==v;)L[O++]=m[R++];return L}}}function x(p){var d=l(p);if(d)return d;throw new Error(`Non-${t} character`)}return{encode:h,decodeUnsafe:l,decode:x}}var gd=xd,md=gd,_c=md;var rm=new Uint8Array(0);var Lc=(e,t)=>{if(e===t)return!0;if(e.byteLength!==t.byteLength)return!1;for(let r=0;r{if(e instanceof Uint8Array&&e.constructor.name==="Uint8Array")return e;if(e instanceof ArrayBuffer)return new Uint8Array(e);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw new Error("Unknown type, must be binary type")};var Rc=e=>new TextEncoder().encode(e),Nc=e=>new TextDecoder().decode(e);var Zs=class{constructor(t,r,n){this.name=t,this.prefix=r,this.baseEncode=n}encode(t){if(t instanceof Uint8Array)return`${this.prefix}${this.baseEncode(t)}`;throw Error("Unknown type, must be binary type")}},Xs=class{constructor(t,r,n){if(this.name=t,this.prefix=r,r.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=r.codePointAt(0),this.baseDecode=n}decode(t){if(typeof t=="string"){if(t.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(t)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(t.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(t){return Pc(this,t)}},Qs=class{constructor(t){this.decoders=t}or(t){return Pc(this,t)}decode(t){let r=t[0],n=this.decoders[r];if(n)return n.decode(t);throw RangeError(`Unable to decode multibase string ${JSON.stringify(t)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}},Pc=(e,t)=>new Qs({...e.decoders||{[e.prefix]:e},...t.decoders||{[t.prefix]:t}}),Js=class{constructor(t,r,n,i){this.name=t,this.prefix=r,this.baseEncode=n,this.baseDecode=i,this.encoder=new Zs(t,r,n),this.decoder=new Xs(t,r,i)}encode(t){return this.encoder.encode(t)}decode(t){return this.decoder.decode(t)}},kr=({name:e,prefix:t,encode:r,decode:n})=>new Js(e,t,r,n),We=({prefix:e,name:t,alphabet:r})=>{let{encode:n,decode:i}=_c(r,t);return kr({prefix:e,name:t,encode:n,decode:s=>De(i(s))})},bd=(e,t,r,n)=>{let i={};for(let u=0;u=8&&(a-=8,o[f++]=255&c>>a)}if(a>=r||255&c<<8-a)throw new SyntaxError("Unexpected end of data");return o},vd=(e,t,r)=>{let n=t[t.length-1]==="=",i=(1<r;)o-=r,s+=t[i&a>>o];if(o&&(s+=t[i&a<kr({prefix:t,name:e,encode(i){return vd(i,n,r)},decode(i){return bd(i,n,r,e)}});var wd=We({prefix:"9",name:"base10",alphabet:"0123456789"});var to={};Lt(to,{base16:()=>Ed,base16upper:()=>Sd});var Ed=St({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),Sd=St({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var eo={};Lt(eo,{base2:()=>Bd});var Bd=St({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var ro={};Lt(ro,{base256emoji:()=>_d});var kc=Array.from("\u{1F680}\u{1FA90}\u2604\u{1F6F0}\u{1F30C}\u{1F311}\u{1F312}\u{1F313}\u{1F314}\u{1F315}\u{1F316}\u{1F317}\u{1F318}\u{1F30D}\u{1F30F}\u{1F30E}\u{1F409}\u2600\u{1F4BB}\u{1F5A5}\u{1F4BE}\u{1F4BF}\u{1F602}\u2764\u{1F60D}\u{1F923}\u{1F60A}\u{1F64F}\u{1F495}\u{1F62D}\u{1F618}\u{1F44D}\u{1F605}\u{1F44F}\u{1F601}\u{1F525}\u{1F970}\u{1F494}\u{1F496}\u{1F499}\u{1F622}\u{1F914}\u{1F606}\u{1F644}\u{1F4AA}\u{1F609}\u263A\u{1F44C}\u{1F917}\u{1F49C}\u{1F614}\u{1F60E}\u{1F607}\u{1F339}\u{1F926}\u{1F389}\u{1F49E}\u270C\u2728\u{1F937}\u{1F631}\u{1F60C}\u{1F338}\u{1F64C}\u{1F60B}\u{1F497}\u{1F49A}\u{1F60F}\u{1F49B}\u{1F642}\u{1F493}\u{1F929}\u{1F604}\u{1F600}\u{1F5A4}\u{1F603}\u{1F4AF}\u{1F648}\u{1F447}\u{1F3B6}\u{1F612}\u{1F92D}\u2763\u{1F61C}\u{1F48B}\u{1F440}\u{1F62A}\u{1F611}\u{1F4A5}\u{1F64B}\u{1F61E}\u{1F629}\u{1F621}\u{1F92A}\u{1F44A}\u{1F973}\u{1F625}\u{1F924}\u{1F449}\u{1F483}\u{1F633}\u270B\u{1F61A}\u{1F61D}\u{1F634}\u{1F31F}\u{1F62C}\u{1F643}\u{1F340}\u{1F337}\u{1F63B}\u{1F613}\u2B50\u2705\u{1F97A}\u{1F308}\u{1F608}\u{1F918}\u{1F4A6}\u2714\u{1F623}\u{1F3C3}\u{1F490}\u2639\u{1F38A}\u{1F498}\u{1F620}\u261D\u{1F615}\u{1F33A}\u{1F382}\u{1F33B}\u{1F610}\u{1F595}\u{1F49D}\u{1F64A}\u{1F639}\u{1F5E3}\u{1F4AB}\u{1F480}\u{1F451}\u{1F3B5}\u{1F91E}\u{1F61B}\u{1F534}\u{1F624}\u{1F33C}\u{1F62B}\u26BD\u{1F919}\u2615\u{1F3C6}\u{1F92B}\u{1F448}\u{1F62E}\u{1F646}\u{1F37B}\u{1F343}\u{1F436}\u{1F481}\u{1F632}\u{1F33F}\u{1F9E1}\u{1F381}\u26A1\u{1F31E}\u{1F388}\u274C\u270A\u{1F44B}\u{1F630}\u{1F928}\u{1F636}\u{1F91D}\u{1F6B6}\u{1F4B0}\u{1F353}\u{1F4A2}\u{1F91F}\u{1F641}\u{1F6A8}\u{1F4A8}\u{1F92C}\u2708\u{1F380}\u{1F37A}\u{1F913}\u{1F619}\u{1F49F}\u{1F331}\u{1F616}\u{1F476}\u{1F974}\u25B6\u27A1\u2753\u{1F48E}\u{1F4B8}\u2B07\u{1F628}\u{1F31A}\u{1F98B}\u{1F637}\u{1F57A}\u26A0\u{1F645}\u{1F61F}\u{1F635}\u{1F44E}\u{1F932}\u{1F920}\u{1F927}\u{1F4CC}\u{1F535}\u{1F485}\u{1F9D0}\u{1F43E}\u{1F352}\u{1F617}\u{1F911}\u{1F30A}\u{1F92F}\u{1F437}\u260E\u{1F4A7}\u{1F62F}\u{1F486}\u{1F446}\u{1F3A4}\u{1F647}\u{1F351}\u2744\u{1F334}\u{1F4A3}\u{1F438}\u{1F48C}\u{1F4CD}\u{1F940}\u{1F922}\u{1F445}\u{1F4A1}\u{1F4A9}\u{1F450}\u{1F4F8}\u{1F47B}\u{1F910}\u{1F92E}\u{1F3BC}\u{1F975}\u{1F6A9}\u{1F34E}\u{1F34A}\u{1F47C}\u{1F48D}\u{1F4E3}\u{1F942}"),Ad=kc.reduce((e,t,r)=>(e[r]=t,e),[]),Cd=kc.reduce((e,t,r)=>(e[t.codePointAt(0)]=r,e),[]);function Id(e){return e.reduce((t,r)=>(t+=Ad[r],t),"")}function Td(e){let t=[];for(let r of e){let n=Cd[r.codePointAt(0)];if(n===void 0)throw new Error(`Non-base256emoji character: ${r}`);t.push(n)}return new Uint8Array(t)}var _d=kr({prefix:"\u{1F680}",name:"base256emoji",encode:Id,decode:Td});var no={};Lt(no,{base32:()=>Ur,base32hex:()=>Dd,base32hexpad:()=>kd,base32hexpadupper:()=>Ud,base32hexupper:()=>Pd,base32pad:()=>Rd,base32padupper:()=>Nd,base32upper:()=>Ld,base32z:()=>Kd});var Ur=St({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),Ld=St({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),Rd=St({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),Nd=St({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),Dd=St({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),Pd=St({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),kd=St({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),Ud=St({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),Kd=St({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var io={};Lt(io,{base36:()=>Od,base36upper:()=>Md});var Od=We({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),Md=We({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var so={};Lt(so,{base58btc:()=>zt,base58flickr:()=>Vd});var zt=We({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),Vd=We({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var oo={};Lt(oo,{base64:()=>Ai,base64pad:()=>Fd,base64url:()=>Hd,base64urlpad:()=>qd});var Ai=St({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),Fd=St({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),Hd=St({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),qd=St({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var ao={};Lt(ao,{base8:()=>zd});var zd=St({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var co={};Lt(co,{identity:()=>Gd});var Gd=kr({prefix:"\0",name:"identity",encode:e=>Nc(e),decode:e=>Rc(e)});var gm=new TextEncoder,mm=new TextDecoder;var uo={};Lt(uo,{identity:()=>$e});var $d=Oc,Uc=128,Zd=127,Xd=~Zd,Qd=Math.pow(2,31);function Oc(e,t,r){t=t||[],r=r||0;for(var n=r;e>=Qd;)t[r++]=e&255|Uc,e/=128;for(;e&Xd;)t[r++]=e&255|Uc,e>>>=7;return t[r]=e|0,Oc.bytes=r-n+1,t}var Jd=fo,jd=128,Kc=127;function fo(e,n){var r=0,n=n||0,i=0,s=n,o,a=e.length;do{if(s>=a)throw fo.bytes=0,new RangeError("Could not decode varint");o=e[s++],r+=i<28?(o&Kc)<=jd);return fo.bytes=s-n,r}var ty=Math.pow(2,7),ey=Math.pow(2,14),ry=Math.pow(2,21),ny=Math.pow(2,28),iy=Math.pow(2,35),sy=Math.pow(2,42),oy=Math.pow(2,49),ay=Math.pow(2,56),cy=Math.pow(2,63),fy=function(e){return e[yn.decode(e,t),yn.decode.bytes],Kr=(e,t,r=0)=>(yn.encode(e,t,r),t),Or=e=>yn.encodingLength(e);var me=(e,t)=>{let r=t.byteLength,n=Or(e),i=n+Or(r),s=new Uint8Array(i+r);return Kr(e,s,0),Kr(r,s,n),s.set(t,i),new Mr(e,r,t,s)},gn=e=>{let t=De(e),[r,n]=xn(t),[i,s]=xn(t.subarray(n)),o=t.subarray(n+s);if(o.byteLength!==i)throw new Error("Incorrect length");return new Mr(r,i,o,t)},Mc=(e,t)=>{if(e===t)return!0;{let r=t;return e.code===r.code&&e.size===r.size&&r.bytes instanceof Uint8Array&&Lc(e.bytes,r.bytes)}},Mr=class{constructor(t,r,n,i){this.code=t,this.size=r,this.digest=n,this.bytes=i}};var Vc=0,ly="identity",Fc=De,py=e=>me(Vc,Fc(e)),$e={code:Vc,name:ly,encode:Fc,digest:py};var po={};Lt(po,{sha256:()=>Ot,sha512:()=>dy});var lo=({name:e,code:t,encode:r})=>new ho(e,t,r),ho=class{constructor(t,r,n){this.name=t,this.code=r,this.encode=n}digest(t){if(t instanceof Uint8Array){let r=this.encode(t);return r instanceof Uint8Array?me(this.code,r):r.then(n=>me(this.code,n))}else throw Error("Unknown type, must be binary type")}};var qc=e=>async t=>new Uint8Array(await crypto.subtle.digest(e,t)),Ot=lo({name:"sha2-256",code:18,encode:qc("SHA-256")}),dy=lo({name:"sha2-512",code:19,encode:qc("SHA-512")});var zc=(e,t)=>{let{bytes:r,version:n}=e;switch(n){case 0:return xy(r,yo(e),t||zt.encoder);default:return gy(r,yo(e),t||Ur.encoder)}};var Gc=new WeakMap,yo=e=>{let t=Gc.get(e);if(t==null){let r=new Map;return Gc.set(e,r),r}return t},cr=class e{constructor(t,r,n,i){this.code=r,this.version=t,this.multihash=n,this.bytes=i,this["/"]=i}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:t,multihash:r}=this;if(t!==mn)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(r.code!==my)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return e.createV0(r)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:t,digest:r}=this.multihash,n=me(t,r);return e.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(t){return e.equals(this,t)}static equals(t,r){let n=r;return n&&t.code===n.code&&t.version===n.version&&Mc(t.multihash,n.multihash)}toString(t){return zc(this,t)}toJSON(){return{"/":zc(this)}}link(){return this}get[Symbol.toStringTag](){return"CID"}[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(t){if(t==null)return null;let r=t;if(r instanceof e)return r;if(r["/"]!=null&&r["/"]===r.bytes||r.asCID===r){let{version:n,code:i,multihash:s,bytes:o}=r;return new e(n,i,s,o||Yc(n,i,s.bytes))}else if(r[by]===!0){let{version:n,multihash:i,code:s}=r,o=gn(i);return e.create(n,s,o)}else return null}static create(t,r,n){if(typeof r!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(t){case 0:{if(r!==mn)throw new Error(`Version 0 CID must use dag-pb (code: ${mn}) block encoding`);return new e(t,r,n,n.bytes)}case 1:{let i=Yc(t,r,n.bytes);return new e(t,r,n,i)}default:throw new Error("Invalid version")}}static createV0(t){return e.create(0,mn,t)}static createV1(t,r){return e.create(1,t,r)}static decode(t){let[r,n]=e.decodeFirst(t);if(n.length)throw new Error("Incorrect length");return r}static decodeFirst(t){let r=e.inspectBytes(t),n=r.size-r.multihashSize,i=De(t.subarray(n,n+r.multihashSize));if(i.byteLength!==r.multihashSize)throw new Error("Incorrect length");let s=i.subarray(r.multihashSize-r.digestSize),o=new Mr(r.multihashCode,r.digestSize,s,i);return[r.version===0?e.createV0(o):e.createV1(r.codec,o),t.subarray(r.size)]}static inspectBytes(t){let r=0,n=()=>{let[h,l]=xn(t.subarray(r));return r+=l,h},i=n(),s=mn;if(i===18?(i=0,r=0):s=n(),i!==0&&i!==1)throw new RangeError(`Invalid CID version ${i}`);let o=r,a=n(),c=n(),f=r+c,u=f-o;return{version:i,codec:s,multihashCode:a,digestSize:c,multihashSize:u,size:f}}static parse(t,r){let[n,i]=yy(t,r),s=e.decode(i);if(s.version===0&&t[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return yo(s).set(n,t),s}},yy=(e,t)=>{switch(e[0]){case"Q":{let r=t||zt;return[zt.prefix,r.decode(`${zt.prefix}${e}`)]}case zt.prefix:{let r=t||zt;return[zt.prefix,r.decode(e)]}case Ur.prefix:{let r=t||Ur;return[Ur.prefix,r.decode(e)]}default:{if(t==null)throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");return[e[0],t.decode(e)]}}},xy=(e,t,r)=>{let{prefix:n}=r;if(n!==zt.prefix)throw Error(`Cannot string encode V0 in ${r.name} encoding`);let i=t.get(n);if(i==null){let s=r.encode(e).slice(1);return t.set(n,s),s}else return i},gy=(e,t,r)=>{let{prefix:n}=r,i=t.get(n);if(i==null){let s=r.encode(e);return t.set(n,s),s}else return i},mn=112,my=18,Yc=(e,t,r)=>{let n=Or(e),i=n+Or(t),s=new Uint8Array(i+r.byteLength);return Kr(e,s,0),Kr(t,s,n),s.set(r,i),s},by=Symbol.for("@ipld/js-cid/CID");var Fr={...co,...eo,...ao,...js,...to,...no,...io,...so,...oo,...ro},Pm={...po,...uo};function $c(e,t,r,n){return{name:e,prefix:t,encoder:{name:e,prefix:t,encode:r},decoder:{decode:n}}}var Wc=$c("utf8","u",e=>"u"+new TextDecoder("utf8").decode(e),e=>new TextEncoder().encode(e.substring(1))),xo=$c("ascii","a",e=>{let t="a";for(let r=0;r{e=e.substring(1);let t=Bt(e.length);for(let r=0;rdr,Ed25519PublicKey:()=>En,generateKeyPair:()=>Ny,generateKeyPairFromSeed:()=>lf,unmarshalEd25519PrivateKey:()=>Ly,unmarshalEd25519PublicKey:()=>Ry});var zm=Gt(Ct(),1),Gm=Gt(wi(),1),Zc=Gt(ht(),1);function Et(e,t="utf8"){let r=Ii[t];if(r==null)throw new Error(`Unsupported encoding "${t}"`);return(t==="utf8"||t==="utf-8")&&globalThis.Buffer!=null&&globalThis.Buffer.from!=null?globalThis.Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString("utf8"):r.encoder.encode(e).substring(1)}function fe(e,t){let r=Uint8Array.from(e.abs().toByteArray());if(r=r[0]===0?r.subarray(1):r,t!=null){if(r.length>t)throw new Error("byte array longer than desired length");r=Zt([new Uint8Array(t-r.length),r])}return Et(r,"base64url")}function Qt(e){let t=Xc(e);return new Zc.default.jsbn.BigInteger(Et(t,"base16"),16)}function Xc(e,t){let r=It(e,"base64urlpad");if(t!=null){if(r.length>t)throw new Error("byte array longer than desired length");r=Zt([new Uint8Array(t-r.length),r])}return r}function ee(e){return e==null?!1:typeof e.then=="function"&&typeof e.catch=="function"&&typeof e.finally=="function"}var Hr=32,Pe=64,Ti=32;function Qc(){let e=Ir.utils.randomPrivateKey(),t=Ir.getPublicKey(e);return{privateKey:ef(e,t),publicKey:t}}function Jc(e){if(e.length!==Ti)throw new TypeError('"seed" must be 32 bytes in length.');if(!(e instanceof Uint8Array))throw new TypeError('"seed" must be a node.js Buffer, or Uint8Array.');let t=e,r=Ir.getPublicKey(t);return{privateKey:ef(t,r),publicKey:r}}function jc(e,t){let r=e.subarray(0,Ti);return Ir.sign(t instanceof Uint8Array?t:t.subarray(),r)}function tf(e,t,r){return Ir.verify(t,r instanceof Uint8Array?r:r.subarray(),e)}function ef(e,t){let r=new Uint8Array(Pe);for(let n=0;n>>31>0){let r=~this.lo+1>>>0,n=~this.hi>>>0;return r===0&&(n=n+1>>>0),-(r+n*4294967296)}return this.lo+this.hi*4294967296}toBigInt(t=!1){if(t)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){let r=~this.lo+1>>>0,n=~this.hi>>>0;return r===0&&(n=n+1>>>0),-(BigInt(r)+(BigInt(n)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toString(t=!1){return this.toBigInt(t).toString()}zzEncode(){let t=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^t)>>>0,this.lo=(this.lo<<1^t)>>>0,this}zzDecode(){let t=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^t)>>>0,this.hi=(this.hi>>>1^t)>>>0,this}length(){let t=this.lo,r=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return n===0?r===0?t<16384?t<128?1:2:t<2097152?3:4:r<16384?r<128?5:6:r<2097152?7:8:n<128?9:10}static fromBigInt(t){if(t===0n)return fr;if(tSy)return this.fromNumber(Number(t));let r=t<0n;r&&(t=-t);let n=t>>32n,i=t-(n<<32n);return r&&(n=~n|0n,i=~i|0n,++i>cf&&(i=0n,++n>cf&&(n=0n))),new e(Number(i),Number(n))}static fromNumber(t){if(t===0)return fr;let r=t<0;r&&(t=-t);let n=t>>>0,i=(t-n)/4294967296>>>0;return r&&(i=~i>>>0,n=~n>>>0,++n>4294967295&&(n=0,++i>4294967295&&(i=0))),new e(n,i)}static from(t){return typeof t=="number"?e.fromNumber(t):typeof t=="bigint"?e.fromBigInt(t):typeof t=="string"?e.fromBigInt(BigInt(t)):t.low!=null||t.high!=null?new e(t.low>>>0,t.high>>>0):fr}},fr=new $t(0,0);fr.toBigInt=function(){return 0n};fr.zzEncode=fr.zzDecode=function(){return this};fr.length=function(){return 1};var cf=4294967296n;function ff(e){let t=0,r=0;for(let n=0;n191&&a<224?s[o++]=(a&31)<<6|e[t++]&63:a>239&&a<365?(a=((a&7)<<18|(e[t++]&63)<<12|(e[t++]&63)<<6|e[t++]&63)-65536,s[o++]=55296+(a>>10),s[o++]=56320+(a&1023)):s[o++]=(a&15)<<12|(e[t++]&63)<<6|e[t++]&63,o>8191&&((i??(i=[])).push(String.fromCharCode.apply(String,s)),o=0);return i!=null?(o>0&&i.push(String.fromCharCode.apply(String,s.slice(0,o))),i.join("")):String.fromCharCode.apply(String,s.slice(0,o))}function wo(e,t,r){let n=r,i,s;for(let o=0;o>6|192,t[r++]=i&63|128):(i&64512)===55296&&((s=e.charCodeAt(o+1))&64512)===56320?(i=65536+((i&1023)<<10)+(s&1023),++o,t[r++]=i>>18|240,t[r++]=i>>12&63|128,t[r++]=i>>6&63|128,t[r++]=i&63|128):(t[r++]=i>>12|224,t[r++]=i>>6&63|128,t[r++]=i&63|128);return r-n}function ue(e,t){return RangeError(`index out of range: ${e.pos} + ${t??1} > ${e.len}`)}function _i(e,t){return(e[t-4]|e[t-3]<<8|e[t-2]<<16|e[t-1]<<24)>>>0}var Eo=class{buf;pos;len;_slice=Uint8Array.prototype.subarray;constructor(t){this.buf=t,this.pos=0,this.len=t.length}uint32(){let t=4294967295;if(t=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(t=(t|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(t=(t|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(t=(t|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(t=(t|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return t;if((this.pos+=5)>this.len)throw this.pos=this.len,ue(this,10);return t}int32(){return this.uint32()|0}sint32(){let t=this.uint32();return t>>>1^-(t&1)|0}bool(){return this.uint32()!==0}fixed32(){if(this.pos+4>this.len)throw ue(this,4);return _i(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw ue(this,4);return _i(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw ue(this,4);let t=sf(this.buf,this.pos);return this.pos+=4,t}double(){if(this.pos+8>this.len)throw ue(this,4);let t=af(this.buf,this.pos);return this.pos+=8,t}bytes(){let t=this.uint32(),r=this.pos,n=this.pos+t;if(n>this.len)throw ue(this,t);return this.pos+=t,r===n?new Uint8Array(0):this.buf.subarray(r,n)}string(){let t=this.bytes();return uf(t,0,t.length)}skip(t){if(typeof t=="number"){if(this.pos+t>this.len)throw ue(this,t);this.pos+=t}else do if(this.pos>=this.len)throw ue(this);while(this.buf[this.pos++]&128);return this}skipType(t){switch(t){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(t=this.uint32()&7)!==4;)this.skipType(t);break;case 5:this.skip(4);break;default:throw Error(`invalid wire type ${t} at offset ${this.pos}`)}return this}readLongVarint(){let t=new $t(0,0),r=0;if(this.len-this.pos>4){for(;r<4;++r)if(t.lo=(t.lo|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return t;if(t.lo=(t.lo|(this.buf[this.pos]&127)<<28)>>>0,t.hi=(t.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return t;r=0}else{for(;r<3;++r){if(this.pos>=this.len)throw ue(this);if(t.lo=(t.lo|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return t}return t.lo=(t.lo|(this.buf[this.pos++]&127)<>>0,t}if(this.len-this.pos>4){for(;r<5;++r)if(t.hi=(t.hi|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return t}else for(;r<5;++r){if(this.pos>=this.len)throw ue(this);if(t.hi=(t.hi|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return t}throw Error("invalid varint encoding")}readFixed64(){if(this.pos+8>this.len)throw ue(this,8);let t=_i(this.buf,this.pos+=4),r=_i(this.buf,this.pos+=4);return new $t(t,r)}int64(){return this.readLongVarint().toBigInt()}int64Number(){return this.readLongVarint().toNumber()}int64String(){return this.readLongVarint().toString()}uint64(){return this.readLongVarint().toBigInt(!0)}uint64Number(){return this.readLongVarint().toNumber(!0)}uint64String(){return this.readLongVarint().toString(!0)}sint64(){return this.readLongVarint().zzDecode().toBigInt()}sint64Number(){return this.readLongVarint().zzDecode().toNumber()}sint64String(){return this.readLongVarint().zzDecode().toString()}fixed64(){return this.readFixed64().toBigInt()}fixed64Number(){return this.readFixed64().toNumber()}fixed64String(){return this.readFixed64().toString()}sfixed64(){return this.readFixed64().toBigInt()}sfixed64Number(){return this.readFixed64().toNumber()}sfixed64String(){return this.readFixed64().toString()}};function So(e){return new Eo(e instanceof Uint8Array?e:e.subarray())}function ur(e,t){let r=So(e);return t.decode(r)}function Bo(e){let t=e??8192,r=t>>>1,n,i=t;return function(o){if(o<1||o>r)return Bt(o);i+o>t&&(n=Bt(t),i=0);let a=n.subarray(i,i+=o);return i&7&&(i=(i|7)+1),a}}var hr=class{fn;len;next;val;constructor(t,r,n){this.fn=t,this.len=r,this.next=void 0,this.val=n}};function Ao(){}var Io=class{head;tail;len;next;constructor(t){this.head=t.head,this.tail=t.tail,this.len=t.len,this.next=t.states}},By=Bo();function Ay(e){return globalThis.Buffer!=null?Bt(e):By(e)}var wn=class{len;head;tail;states;constructor(){this.len=0,this.head=new hr(Ao,0,0),this.tail=this.head,this.states=null}_push(t,r,n){return this.tail=this.tail.next=new hr(t,r,n),this.len+=r,this}uint32(t){return this.len+=(this.tail=this.tail.next=new To((t=t>>>0)<128?1:t<16384?2:t<2097152?3:t<268435456?4:5,t)).len,this}int32(t){return t<0?this._push(bn,10,$t.fromNumber(t)):this.uint32(t)}sint32(t){return this.uint32((t<<1^t>>31)>>>0)}uint64(t){let r=$t.fromBigInt(t);return this._push(bn,r.length(),r)}uint64Number(t){let r=$t.fromNumber(t);return this._push(bn,r.length(),r)}uint64String(t){return this.uint64(BigInt(t))}int64(t){return this.uint64(t)}int64Number(t){return this.uint64Number(t)}int64String(t){return this.uint64String(t)}sint64(t){let r=$t.fromBigInt(t).zzEncode();return this._push(bn,r.length(),r)}sint64Number(t){let r=$t.fromNumber(t).zzEncode();return this._push(bn,r.length(),r)}sint64String(t){return this.sint64(BigInt(t))}bool(t){return this._push(Co,1,t?1:0)}fixed32(t){return this._push(vn,4,t>>>0)}sfixed32(t){return this.fixed32(t)}fixed64(t){let r=$t.fromBigInt(t);return this._push(vn,4,r.lo)._push(vn,4,r.hi)}fixed64Number(t){let r=$t.fromNumber(t);return this._push(vn,4,r.lo)._push(vn,4,r.hi)}fixed64String(t){return this.fixed64(BigInt(t))}sfixed64(t){return this.fixed64(t)}sfixed64Number(t){return this.fixed64Number(t)}sfixed64String(t){return this.fixed64String(t)}float(t){return this._push(nf,4,t)}double(t){return this._push(of,8,t)}bytes(t){let r=t.length>>>0;return r===0?this._push(Co,1,0):this.uint32(r)._push(Iy,r,t)}string(t){let r=ff(t);return r!==0?this.uint32(r)._push(wo,r,t):this._push(Co,1,0)}fork(){return this.states=new Io(this),this.head=this.tail=new hr(Ao,0,0),this.len=0,this}reset(){return this.states!=null?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new hr(Ao,0,0),this.len=0),this}ldelim(){let t=this.head,r=this.tail,n=this.len;return this.reset().uint32(n),n!==0&&(this.tail.next=t.next,this.tail=r,this.len+=n),this}finish(){let t=this.head.next,r=Ay(this.len),n=0;for(;t!=null;)t.fn(t.val,r,n),n+=t.len,t=t.next;return r}};function Co(e,t,r){t[r]=e&255}function Cy(e,t,r){for(;e>127;)t[r++]=e&127|128,e>>>=7;t[r]=e}var To=class extends hr{next;constructor(t,r){super(Cy,t,r),this.next=void 0}};function bn(e,t,r){for(;e.hi!==0;)t[r++]=e.lo&127|128,e.lo=(e.lo>>>7|e.hi<<25)>>>0,e.hi>>>=7;for(;e.lo>127;)t[r++]=e.lo&127|128,e.lo=e.lo>>>7;t[r++]=e.lo}function vn(e,t,r){t[r]=e&255,t[r+1]=e>>>8&255,t[r+2]=e>>>16&255,t[r+3]=e>>>24}function Iy(e,t,r){t.set(e,r)}globalThis.Buffer!=null&&(wn.prototype.bytes=function(e){let t=e.length>>>0;return this.uint32(t),t>0&&this._push(Ty,t,e),this},wn.prototype.string=function(e){let t=globalThis.Buffer.byteLength(e);return this.uint32(t),t>0&&this._push(_y,t,e),this});function Ty(e,t,r){t.set(e,r)}function _y(e,t,r){e.length<40?wo(e,t,r):t.utf8Write!=null?t.utf8Write(e,r):t.set(It(e),r)}function _o(){return new wn}function lr(e,t){let r=_o();return t.encode(e,r,{lengthDelimited:!1}),r.finish()}var zr;(function(e){e[e.VARINT=0]="VARINT",e[e.BIT64=1]="BIT64",e[e.LENGTH_DELIMITED=2]="LENGTH_DELIMITED",e[e.START_GROUP=3]="START_GROUP",e[e.END_GROUP=4]="END_GROUP",e[e.BIT32=5]="BIT32"})(zr||(zr={}));function Li(e,t,r,n){return{name:e,type:t,encode:r,decode:n}}function Lo(e){function t(i){if(e[i.toString()]==null)throw new Error("Invalid enum value");return e[i]}let r=function(s,o){let a=t(s);o.int32(a)},n=function(s){let o=s.int32();return t(o)};return Li("enum",zr.VARINT,r,n)}function pr(e,t){return Li("message",zr.LENGTH_DELIMITED,e,t)}var wt;(function(e){e.RSA="RSA",e.Ed25519="Ed25519",e.Secp256k1="Secp256k1"})(wt||(wt={}));var Ro;(function(e){e[e.RSA=0]="RSA",e[e.Ed25519=1]="Ed25519",e[e.Secp256k1=2]="Secp256k1"})(Ro||(Ro={}));(function(e){e.codec=()=>Lo(Ro)})(wt||(wt={}));var be;(function(e){let t;e.codec=()=>(t==null&&(t=pr((r,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),r.Type!=null&&(n.uint32(8),wt.codec().encode(r.Type,n)),r.Data!=null&&(n.uint32(18),n.bytes(r.Data)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={},s=n==null?r.len:r.pos+n;for(;r.pos>>3){case 1:i.Type=wt.codec().decode(r);break;case 2:i.Data=r.bytes();break;default:r.skipType(o&7);break}}return i})),t),e.encode=r=>lr(r,e.codec()),e.decode=r=>ur(r,e.codec())})(be||(be={}));var ve;(function(e){let t;e.codec=()=>(t==null&&(t=pr((r,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),r.Type!=null&&(n.uint32(8),wt.codec().encode(r.Type,n)),r.Data!=null&&(n.uint32(18),n.bytes(r.Data)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={},s=n==null?r.len:r.pos+n;for(;r.pos>>3){case 1:i.Type=wt.codec().decode(r);break;case 2:i.Data=r.bytes();break;default:r.skipType(o&7);break}}return i})),t),e.encode=r=>lr(r,e.codec()),e.decode=r=>ur(r,e.codec())})(ve||(ve={}));var En=class{_key;constructor(t){this._key=Gr(t,Hr)}verify(t,r){return tf(this._key,r,t)}marshal(){return this._key}get bytes(){return be.encode({Type:wt.Ed25519,Data:this.marshal()}).subarray()}equals(t){return Rt(this.bytes,t.bytes)}hash(){let t=Ot.digest(this.bytes);return ee(t)?t.then(({bytes:r})=>r):t.bytes}},dr=class{_key;_publicKey;constructor(t,r){this._key=Gr(t,Pe),this._publicKey=Gr(r,Hr)}sign(t){return jc(this._key,t)}get public(){return new En(this._publicKey)}marshal(){return this._key}get bytes(){return ve.encode({Type:wt.Ed25519,Data:this.marshal()}).subarray()}equals(t){return Rt(this.bytes,t.bytes)}async hash(){let t=Ot.digest(this.bytes),r;return ee(t)?{bytes:r}=await t:r=t.bytes,r}async id(){let t=$e.digest(this.public.bytes);return zt.encode(t.bytes).substring(1)}async export(t,r="libp2p-key"){if(r==="libp2p-key")return qr(this.bytes,t);throw new it(`export format '${r}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function Ly(e){if(e.length>Pe){e=Gr(e,Pe+Hr);let n=e.subarray(0,Pe),i=e.subarray(Pe,e.length);return new dr(n,i)}e=Gr(e,Pe);let t=e.subarray(0,Pe),r=e.subarray(Hr);return new dr(t,r)}function Ry(e){return e=Gr(e,Hr),new En(e)}async function Ny(){let{privateKey:e,publicKey:t}=Qc();return new dr(e,t)}async function lf(e){let{privateKey:t,publicKey:r}=Jc(e);return new dr(t,r)}function Gr(e,t){if(e=Uint8Array.from(e??[]),e.length!==t)throw new it(`Key must be a Uint8Array of length ${t}, got ${e.length}`,"ERR_INVALID_KEY_TYPE");return e}var Dy={"P-256":256,"P-384":384,"P-521":521},Py=Object.keys(Dy),Yb=Py.join(" / ");var Ko={};Lt(Ko,{MAX_KEY_SIZE:()=>Cn,RsaPrivateKey:()=>Yr,RsaPublicKey:()=>An,fromJwk:()=>Gy,generateKeyPair:()=>Yy,unmarshalRsaPrivateKey:()=>qy,unmarshalRsaPublicKey:()=>zy});var Bn=Gt(ht(),1);var Lv=Gt(gf(),1);function Ni(e){if(isNaN(e)||e<=0)throw new it("random bytes length must be a Number bigger than 0","ERR_INVALID_LENGTH");return je(e)}var lv=Gt(Bi(),1),ko=Gt(ht(),1);function mf(e,t){return t.map(r=>Qt(e[r]))}function bf(e){return ko.default.pki.setRsaPrivateKey(...mf(e,["n","e","d","p","q","dp","dq","qi"]))}function vf(e){return ko.default.pki.setRsaPublicKey(...mf(e,["n","e"]))}var xr={};Lt(xr,{jwkToPkcs1:()=>Oy,jwkToPkix:()=>Vy,pkcs1ToJwk:()=>Ky,pkixToJwk:()=>My});var yv=Gt(ln(),1),xv=Gt(Bi(),1);var ke=Gt(ht(),1);function Ky(e){let t=ke.default.asn1.fromDer(Et(e,"ascii")),r=ke.default.pki.privateKeyFromAsn1(t);return{kty:"RSA",n:fe(r.n),e:fe(r.e),d:fe(r.d),p:fe(r.p),q:fe(r.q),dp:fe(r.dP),dq:fe(r.dQ),qi:fe(r.qInv),alg:"RS256"}}function Oy(e){if(e.n==null||e.e==null||e.d==null||e.p==null||e.q==null||e.dp==null||e.dq==null||e.qi==null)throw new it("JWK was missing components","ERR_INVALID_PARAMETERS");let t=ke.default.pki.privateKeyToAsn1({n:Qt(e.n),e:Qt(e.e),d:Qt(e.d),p:Qt(e.p),q:Qt(e.q),dP:Qt(e.dp),dQ:Qt(e.dq),qInv:Qt(e.qi)});return It(ke.default.asn1.toDer(t).getBytes(),"ascii")}function My(e){let t=ke.default.asn1.fromDer(Et(e,"ascii")),r=ke.default.pki.publicKeyFromAsn1(t);return{kty:"RSA",n:fe(r.n),e:fe(r.e)}}function Vy(e){if(e.n==null||e.e==null)throw new it("JWK was missing components","ERR_INVALID_PARAMETERS");let t=ke.default.pki.publicKeyToAsn1({n:Qt(e.n),e:Qt(e.e)});return It(ke.default.asn1.toDer(t).getBytes(),"ascii")}async function wf(e){let t=await Wt.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:e,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),r=await Bf(t);return{privateKey:r[0],publicKey:r[1]}}async function Uo(e){let r=[await Wt.get().subtle.importKey("jwk",e,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["sign"]),await Fy(e)],n=await Bf({privateKey:r[0],publicKey:r[1]});return{privateKey:n[0],publicKey:n[1]}}async function Ef(e,t){let r=await Wt.get().subtle.importKey("jwk",e,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await Wt.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},r,t instanceof Uint8Array?t:t.subarray());return new Uint8Array(n,0,n.byteLength)}async function Sf(e,t,r){let n=await Wt.get().subtle.importKey("jwk",e,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return Wt.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,t,r instanceof Uint8Array?r:r.subarray())}async function Bf(e){if(e.privateKey==null||e.publicKey==null)throw new it("Private and public key are required","ERR_INVALID_PARAMETERS");return Promise.all([Wt.get().subtle.exportKey("jwk",e.privateKey),Wt.get().subtle.exportKey("jwk",e.publicKey)])}async function Fy(e){return Wt.get().subtle.importKey("jwk",{kty:e.kty,n:e.n,e:e.e},{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["verify"])}function Af(e,t,r,n){let i=t?vf(e):bf(e),s=Et(r instanceof Uint8Array?r:r.subarray(),"ascii"),o=n(s,i);return It(o,"ascii")}function Cf(e,t){return Af(e,!0,t,(r,n)=>n.encrypt(r))}function If(e,t){return Af(e,!1,t,(r,n)=>n.decrypt(r))}function Di(e){if(e.kty!=="RSA")throw new it("invalid key type","ERR_INVALID_KEY_TYPE");if(e.n==null)throw new it("invalid key modulus","ERR_INVALID_KEY_MODULUS");return It(e.n,"base64url").length*8}var Cn=8192,An=class{_key;constructor(t){this._key=t}verify(t,r){return Sf(this._key,r,t)}marshal(){return xr.jwkToPkix(this._key)}get bytes(){return be.encode({Type:wt.RSA,Data:this.marshal()}).subarray()}encrypt(t){return Cf(this._key,t)}equals(t){return Rt(this.bytes,t.bytes)}hash(){let t=Ot.digest(this.bytes);return ee(t)?t.then(({bytes:r})=>r):t.bytes}},Yr=class{_key;_publicKey;constructor(t,r){this._key=t,this._publicKey=r}genSecret(){return Ni(16)}sign(t){return Ef(this._key,t)}get public(){if(this._publicKey==null)throw new it("public key not provided","ERR_PUBKEY_NOT_PROVIDED");return new An(this._publicKey)}decrypt(t){return If(this._key,t)}marshal(){return xr.jwkToPkcs1(this._key)}get bytes(){return ve.encode({Type:wt.RSA,Data:this.marshal()}).subarray()}equals(t){return Rt(this.bytes,t.bytes)}hash(){let t=Ot.digest(this.bytes);return ee(t)?t.then(({bytes:r})=>r):t.bytes}async id(){let t=await this.public.hash();return Et(t,"base58btc")}async export(t,r="pkcs-8"){if(r==="pkcs-8"){let n=new Bn.default.util.ByteBuffer(this.marshal()),i=Bn.default.asn1.fromDer(n),s=Bn.default.pki.privateKeyFromAsn1(i),o={algorithm:"aes256",count:1e4,saltSize:128/8,prfAlgorithm:"sha512"};return Bn.default.pki.encryptRsaPrivateKey(s,t,o)}else{if(r==="libp2p-key")return qr(this.bytes,t);throw new it(`export format '${r}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}}};async function qy(e){let t=xr.pkcs1ToJwk(e);if(Di(t)>Cn)throw new it("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let r=await Uo(t);return new Yr(r.privateKey,r.publicKey)}function zy(e){let t=xr.pkixToJwk(e);if(Di(t)>Cn)throw new it("key size is too large","ERR_KEY_SIZE_TOO_LARGE");return new An(t)}async function Gy(e){if(Di(e)>Cn)throw new it("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let t=await Uo(e);return new Yr(t.privateKey,t.publicKey)}async function Yy(e){if(e>Cn)throw new it("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let t=await wf(e);return new Yr(t.privateKey,t.publicKey)}var Fo={};Lt(Fo,{Secp256k1PrivateKey:()=>Tn,Secp256k1PublicKey:()=>In,generateKeyPair:()=>i1,unmarshalSecp256k1PrivateKey:()=>r1,unmarshalSecp256k1PublicKey:()=>n1});function Wy(e){let t=en(e);Jt(t,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});let{endo:r,Fp:n,a:i}=t;if(r){if(!n.eql(i,n.ZERO))throw new Error("Endomorphism can only be defined for Koblitz curves that have a=0");if(typeof r!="object"||typeof r.beta!="bigint"||typeof r.splitScalar!="function")throw new Error("Expected endomorphism with beta: bigint and splitScalar: function")}return Object.freeze({...t})}var{bytesToNumberBE:$y,hexToBytes:Zy}=jn,gr={Err:class extends Error{constructor(t=""){super(t)}},_parseInt(e){let{Err:t}=gr;if(e.length<2||e[0]!==2)throw new t("Invalid signature integer tag");let r=e[1],n=e.subarray(2,r+2);if(!r||n.length!==r)throw new t("Invalid signature integer: wrong length");if(n[0]&128)throw new t("Invalid signature integer: negative");if(n[0]===0&&!(n[1]&128))throw new t("Invalid signature integer: unnecessary leading zero");return{d:$y(n),l:e.subarray(r+2)}},toSig(e){let{Err:t}=gr,r=typeof e=="string"?Zy(e):e;if(!(r instanceof Uint8Array))throw new Error("ui8a expected");let n=r.length;if(n<2||r[0]!=48)throw new t("Invalid signature tag");if(r[1]!==n-2)throw new t("Invalid signature: incorrect length");let{d:i,l:s}=gr._parseInt(r.subarray(2)),{d:o,l:a}=gr._parseInt(s);if(a.length)throw new t("Invalid signature: left bytes after parsing");return{r:i,s:o}},hexFromSig(e){let t=f=>Number.parseInt(f[0],16)&8?"00"+f:f,r=f=>{let u=f.toString(16);return u.length&1?`0${u}`:u},n=t(r(e.s)),i=t(r(e.r)),s=n.length/2,o=i.length/2,a=r(s),c=r(o);return`30${r(o+s+4)}02${c}${i}02${a}${n}`}},Ue=BigInt(0),re=BigInt(1),Kv=BigInt(2),Tf=BigInt(3),Ov=BigInt(4);function Xy(e){let t=Wy(e),{Fp:r}=t,n=t.toBytes||((p,d,y)=>{let g=d.toAffine();return Te(Uint8Array.from([4]),r.toBytes(g.x),r.toBytes(g.y))}),i=t.fromBytes||(p=>{let d=p.subarray(1),y=r.fromBytes(d.subarray(0,r.BYTES)),g=r.fromBytes(d.subarray(r.BYTES,2*r.BYTES));return{x:y,y:g}});function s(p){let{a:d,b:y}=t,g=r.sqr(p),v=r.mul(g,p);return r.add(r.add(v,r.mul(p,d)),y)}if(!r.eql(r.sqr(t.Gy),s(t.Gx)))throw new Error("bad generator point: equation left != right");function o(p){return typeof p=="bigint"&&Uer.eql(m,r.ZERO);return v(y)&&v(g)?h.ZERO:new h(y,g,r.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(d){let y=r.invertBatch(d.map(g=>g.pz));return d.map((g,v)=>g.toAffine(y[v])).map(h.fromAffine)}static fromHex(d){let y=h.fromAffine(i(yt("pointHex",d)));return y.assertValidity(),y}static fromPrivateKey(d){return h.BASE.multiply(c(d))}_setWindowSize(d){this._WINDOW_SIZE=d,f.delete(this)}assertValidity(){if(this.is0()){if(t.allowInfinityPoint&&!r.is0(this.py))return;throw new Error("bad point: ZERO")}let{x:d,y}=this.toAffine();if(!r.isValid(d)||!r.isValid(y))throw new Error("bad point: x or y not FE");let g=r.sqr(y),v=s(d);if(!r.eql(g,v))throw new Error("bad point: equation left != right");if(!this.isTorsionFree())throw new Error("bad point: not in prime-order subgroup")}hasEvenY(){let{y:d}=this.toAffine();if(r.isOdd)return!r.isOdd(d);throw new Error("Field doesn't support isOdd")}equals(d){u(d);let{px:y,py:g,pz:v}=this,{px:m,py:C,pz:S}=d,B=r.eql(r.mul(y,S),r.mul(m,v)),R=r.eql(r.mul(g,S),r.mul(C,v));return B&&R}negate(){return new h(this.px,r.neg(this.py),this.pz)}double(){let{a:d,b:y}=t,g=r.mul(y,Tf),{px:v,py:m,pz:C}=this,S=r.ZERO,B=r.ZERO,R=r.ZERO,L=r.mul(v,v),O=r.mul(m,m),M=r.mul(C,C),U=r.mul(v,m);return U=r.add(U,U),R=r.mul(v,C),R=r.add(R,R),S=r.mul(d,R),B=r.mul(g,M),B=r.add(S,B),S=r.sub(O,B),B=r.add(O,B),B=r.mul(S,B),S=r.mul(U,S),R=r.mul(g,R),M=r.mul(d,M),U=r.sub(L,M),U=r.mul(d,U),U=r.add(U,R),R=r.add(L,L),L=r.add(R,L),L=r.add(L,M),L=r.mul(L,U),B=r.add(B,L),M=r.mul(m,C),M=r.add(M,M),L=r.mul(M,U),S=r.sub(S,L),R=r.mul(M,O),R=r.add(R,R),R=r.add(R,R),new h(S,B,R)}add(d){u(d);let{px:y,py:g,pz:v}=this,{px:m,py:C,pz:S}=d,B=r.ZERO,R=r.ZERO,L=r.ZERO,O=t.a,M=r.mul(t.b,Tf),U=r.mul(y,m),q=r.mul(g,C),z=r.mul(v,S),Z=r.add(y,g),A=r.add(m,C);Z=r.mul(Z,A),A=r.add(U,q),Z=r.sub(Z,A),A=r.add(y,v);let N=r.add(m,S);return A=r.mul(A,N),N=r.add(U,z),A=r.sub(A,N),N=r.add(g,v),B=r.add(C,S),N=r.mul(N,B),B=r.add(q,z),N=r.sub(N,B),L=r.mul(O,A),B=r.mul(M,z),L=r.add(B,L),B=r.sub(q,L),L=r.add(q,L),R=r.mul(B,L),q=r.add(U,U),q=r.add(q,U),z=r.mul(O,z),A=r.mul(M,A),q=r.add(q,z),z=r.sub(U,z),z=r.mul(O,z),A=r.add(A,z),U=r.mul(q,A),R=r.add(R,U),U=r.mul(N,A),B=r.mul(Z,B),B=r.sub(B,U),U=r.mul(Z,q),L=r.mul(N,L),L=r.add(L,U),new h(B,R,L)}subtract(d){return this.add(d.negate())}is0(){return this.equals(h.ZERO)}wNAF(d){return x.wNAFCached(this,f,d,y=>{let g=r.invertBatch(y.map(v=>v.pz));return y.map((v,m)=>v.toAffine(g[m])).map(h.fromAffine)})}multiplyUnsafe(d){let y=h.ZERO;if(d===Ue)return y;if(a(d),d===re)return this;let{endo:g}=t;if(!g)return x.unsafeLadder(this,d);let{k1neg:v,k1:m,k2neg:C,k2:S}=g.splitScalar(d),B=y,R=y,L=this;for(;m>Ue||S>Ue;)m&re&&(B=B.add(L)),S&re&&(R=R.add(L)),L=L.double(),m>>=re,S>>=re;return v&&(B=B.negate()),C&&(R=R.negate()),R=new h(r.mul(R.px,g.beta),R.py,R.pz),B.add(R)}multiply(d){a(d);let y=d,g,v,{endo:m}=t;if(m){let{k1neg:C,k1:S,k2neg:B,k2:R}=m.splitScalar(y),{p:L,f:O}=this.wNAF(S),{p:M,f:U}=this.wNAF(R);L=x.constTimeNegate(C,L),M=x.constTimeNegate(B,M),M=new h(r.mul(M.px,m.beta),M.py,M.pz),g=L.add(M),v=O.add(U)}else{let{p:C,f:S}=this.wNAF(y);g=C,v=S}return h.normalizeZ([g,v])[0]}multiplyAndAddUnsafe(d,y,g){let v=h.BASE,m=(S,B)=>B===Ue||B===re||!S.equals(v)?S.multiplyUnsafe(B):S.multiply(B),C=m(this,y).add(m(d,g));return C.is0()?void 0:C}toAffine(d){let{px:y,py:g,pz:v}=this,m=this.is0();d==null&&(d=m?r.ONE:r.inv(v));let C=r.mul(y,d),S=r.mul(g,d),B=r.mul(v,d);if(m)return{x:r.ZERO,y:r.ZERO};if(!r.eql(B,r.ONE))throw new Error("invZ was invalid");return{x:C,y:S}}isTorsionFree(){let{h:d,isTorsionFree:y}=t;if(d===re)return!0;if(y)return y(h,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:d,clearCofactor:y}=t;return d===re?this:y?y(h,this):this.multiplyUnsafe(t.h)}toRawBytes(d=!0){return this.assertValidity(),n(h,this,d)}toHex(d=!0){return Ae(this.toRawBytes(d))}}h.BASE=new h(t.Gx,t.Gy,r.ONE),h.ZERO=new h(r.ZERO,r.ONE,r.ZERO);let l=t.nBitLength,x=ri(h,t.endo?Math.ceil(l/2):l);return{CURVE:t,ProjectivePoint:h,normPrivateKeyToScalar:c,weierstrassEquation:s,isWithinCurveOrder:o}}function Qy(e){let t=en(e);return Jt(t,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...t})}function _f(e){let t=Qy(e),{Fp:r,n}=t,i=r.BYTES+1,s=2*r.BYTES+1;function o(A){return UeAe(Ve(A,t.nByteLength));function p(A){let N=n>>re;return A>N}function d(A){return p(A)?a(-A):A}let y=(A,N,T)=>Ce(A.slice(N,T));class g{constructor(N,T,_){this.r=N,this.s=T,this.recovery=_,this.assertValidity()}static fromCompact(N){let T=t.nByteLength;return N=yt("compactSignature",N,T*2),new g(y(N,0,T),y(N,T,2*T))}static fromDER(N){let{r:T,s:_}=gr.toSig(yt("DER",N));return new g(T,_)}assertValidity(){if(!l(this.r))throw new Error("r must be 0 < r < CURVE.n");if(!l(this.s))throw new Error("s must be 0 < s < CURVE.n")}addRecoveryBit(N){return new g(this.r,this.s,N)}recoverPublicKey(N){let{r:T,s:_,recovery:w}=this,k=R(yt("msgHash",N));if(w==null||![0,1,2,3].includes(w))throw new Error("recovery id invalid");let K=w===2||w===3?T+t.n:T;if(K>=r.ORDER)throw new Error("recovery id 2 or 3 invalid");let F=w&1?"03":"02",W=f.fromHex(F+x(K)),$=c(K),et=a(-k*$),X=a(_*$),J=f.BASE.multiplyAndAddUnsafe(W,et,X);if(!J)throw new Error("point at infinify");return J.assertValidity(),J}hasHighS(){return p(this.s)}normalizeS(){return this.hasHighS()?new g(this.r,a(-this.s),this.recovery):this}toDERRawBytes(){return tr(this.toDERHex())}toDERHex(){return gr.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return tr(this.toCompactHex())}toCompactHex(){return x(this.r)+x(this.s)}}let v={isValidPrivateKey(A){try{return u(A),!0}catch{return!1}},normPrivateKeyToScalar:u,randomPrivateKey:()=>{let A=bs(t.n);return Ha(t.randomBytes(A),t.n)},precompute(A=8,N=f.BASE){return N._setWindowSize(A),N.multiply(BigInt(3)),N}};function m(A,N=!0){return f.fromPrivateKey(A).toRawBytes(N)}function C(A){let N=A instanceof Uint8Array,T=typeof A=="string",_=(N||T)&&A.length;return N?_===i||_===s:T?_===2*i||_===2*s:A instanceof f}function S(A,N,T=!0){if(C(A))throw new Error("first arg must be private key");if(!C(N))throw new Error("second arg must be public key");return f.fromHex(N).multiply(u(A)).toRawBytes(T)}let B=t.bits2int||function(A){let N=Ce(A),T=A.length*8-t.nBitLength;return T>0?N>>BigInt(T):N},R=t.bits2int_modN||function(A){return a(B(A))},L=tn(t.nBitLength);function O(A){if(typeof A!="bigint")throw new Error("bigint expected");if(!(Ue<=A&&Aut in T))throw new Error("sign() legacy options not supported");let{hash:_,randomBytes:w}=t,{lowS:k,prehash:K,extraEntropy:F}=T;k==null&&(k=!0),A=yt("msgHash",A),K&&(A=yt("prehashed msgHash",_(A)));let W=R(A),$=u(N),et=[O($),O(W)];if(F!=null){let ut=F===!0?w(r.BYTES):F;et.push(yt("extraEntropy",ut))}let X=Te(...et),J=W;function lt(ut){let kt=B(ut);if(!l(kt))return;let Ut=c(kt),Tt=f.BASE.multiply(kt).toAffine(),Mt=a(Tt.x);if(Mt===Ue)return;let we=a(Ut*a(J+Mt*$));if(we===Ue)return;let Xe=(Tt.x===Mt?0:2)|Number(Tt.y&re),Xr=we;return k&&p(we)&&(Xr=d(we),Xe^=1),new g(Mt,Xr,Xe)}return{seed:X,k2sig:lt}}let U={lowS:t.lowS,prehash:!1},q={lowS:t.lowS,prehash:!1};function z(A,N,T=U){let{seed:_,k2sig:w}=M(A,N,T),k=t;return ds(k.hash.outputLen,k.nByteLength,k.hmac)(_,w)}f.BASE._setWindowSize(8);function Z(A,N,T,_=q){let w=A;if(N=yt("msgHash",N),T=yt("publicKey",T),"strict"in _)throw new Error("options.strict was renamed to lowS");let{lowS:k,prehash:K}=_,F,W;try{if(typeof w=="string"||w instanceof Uint8Array)try{F=g.fromDER(w)}catch(Tt){if(!(Tt instanceof gr.Err))throw Tt;F=g.fromCompact(w)}else if(typeof w=="object"&&typeof w.r=="bigint"&&typeof w.s=="bigint"){let{r:Tt,s:Mt}=w;F=new g(Tt,Mt)}else throw new Error("PARSE");W=f.fromHex(T)}catch(Tt){if(Tt.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(k&&F.hasHighS())return!1;K&&(N=t.hash(N));let{r:$,s:et}=F,X=R(N),J=c(et),lt=a(X*J),ut=a($*J),kt=f.BASE.multiplyAndAddUnsafe(W,lt,ut)?.toAffine();return kt?a(kt.x)===$:!1}return{CURVE:t,getPublicKey:m,getSharedSecret:S,sign:z,verify:Z,ProjectivePoint:f,Signature:g,utils:v}}function Jy(e){return{hash:e,hmac:(t,...r)=>Tr(e,t,$n(...r)),randomBytes:je}}function Lf(e,t){let r=n=>_f({...e,...Jy(n)});return Object.freeze({...r(t),create:r})}var Df=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),Rf=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),jy=BigInt(1),Oo=BigInt(2),Nf=(e,t)=>(e+t/Oo)/t;function t1(e){let t=Df,r=BigInt(3),n=BigInt(6),i=BigInt(11),s=BigInt(22),o=BigInt(23),a=BigInt(44),c=BigInt(88),f=e*e*e%t,u=f*f*e%t,h=xt(u,r,t)*u%t,l=xt(h,r,t)*u%t,x=xt(l,Oo,t)*f%t,p=xt(x,i,t)*x%t,d=xt(p,s,t)*p%t,y=xt(d,a,t)*d%t,g=xt(y,c,t)*y%t,v=xt(g,a,t)*d%t,m=xt(v,r,t)*u%t,C=xt(m,o,t)*p%t,S=xt(C,n,t)*f%t,B=xt(S,Oo,t);if(!Mo.eql(Mo.sqr(B),e))throw new Error("Cannot find square root");return B}var Mo=ei(Df,void 0,void 0,{sqrt:t1}),he=Lf({a:BigInt(0),b:BigInt(7),Fp:Mo,n:Rf,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:e=>{let t=Rf,r=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-jy*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),i=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),s=r,o=BigInt("0x100000000000000000000000000000000"),a=Nf(s*e,t),c=Nf(-n*e,t),f=at(e-a*r-c*i,t),u=at(-a*n-c*s,t),h=f>o,l=u>o;if(h&&(f=t-f),l&&(u=t-u),f>o||u>o)throw new Error("splitScalar: Endomorphism failed, k="+e);return{k1neg:h,k1:f,k2neg:l,k2:u}}}},_r),Wv=BigInt(0);var $v=he.ProjectivePoint;function Pf(){return he.utils.randomPrivateKey()}function kf(e,t){let r=Ot.digest(t instanceof Uint8Array?t:t.subarray());if(ee(r))return r.then(({digest:n})=>he.sign(n,e).toDERRawBytes()).catch(n=>{throw new it(String(n),"ERR_INVALID_INPUT")});try{return he.sign(r.digest,e).toDERRawBytes()}catch(n){throw new it(String(n),"ERR_INVALID_INPUT")}}function Uf(e,t,r){let n=Ot.digest(r instanceof Uint8Array?r:r.subarray());if(ee(n))return n.then(({digest:i})=>he.verify(t,i,e)).catch(i=>{throw new it(String(i),"ERR_INVALID_INPUT")});try{return he.verify(t,n.digest,e)}catch(i){throw new it(String(i),"ERR_INVALID_INPUT")}}function Kf(e){return he.ProjectivePoint.fromHex(e).toRawBytes(!0)}function Of(e){try{he.getPublicKey(e,!0)}catch(t){throw new it(String(t),"ERR_INVALID_PRIVATE_KEY")}}function Vo(e){try{he.ProjectivePoint.fromHex(e)}catch(t){throw new it(String(t),"ERR_INVALID_PUBLIC_KEY")}}function Mf(e){try{return he.getPublicKey(e,!0)}catch(t){throw new it(String(t),"ERR_INVALID_PRIVATE_KEY")}}var In=class{_key;constructor(t){Vo(t),this._key=t}verify(t,r){return Uf(this._key,r,t)}marshal(){return Kf(this._key)}get bytes(){return be.encode({Type:wt.Secp256k1,Data:this.marshal()}).subarray()}equals(t){return Rt(this.bytes,t.bytes)}async hash(){let t=Ot.digest(this.bytes),r;return ee(t)?{bytes:r}=await t:r=t.bytes,r}},Tn=class{_key;_publicKey;constructor(t,r){this._key=t,this._publicKey=r??Mf(t),Of(this._key),Vo(this._publicKey)}sign(t){return kf(this._key,t)}get public(){return new In(this._publicKey)}marshal(){return this._key}get bytes(){return ve.encode({Type:wt.Secp256k1,Data:this.marshal()}).subarray()}equals(t){return Rt(this.bytes,t.bytes)}hash(){let t=Ot.digest(this.bytes);return ee(t)?t.then(({bytes:r})=>r):t.bytes}async id(){let t=await this.public.hash();return Et(t,"base58btc")}async export(t,r="libp2p-key"){if(r==="libp2p-key")return qr(this.bytes,t);throw new it(`export format '${r}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function r1(e){return new Tn(e)}function n1(e){return new In(e)}async function i1(){let e=Pf();return new Tn(e)}var mr={rsa:Ko,ed25519:No,secp256k1:Fo};function Vf(e){let t=Object.keys(mr).join(" / ");return new it(`invalid or unsupported key type ${e}. Must be ${t}`,"ERR_UNSUPPORTED_KEY_TYPE")}function Ff(e){let t=be.decode(e),r=t.Data??new Uint8Array;switch(t.Type){case wt.RSA:return mr.rsa.unmarshalRsaPublicKey(r);case wt.Ed25519:return mr.ed25519.unmarshalEd25519PublicKey(r);case wt.Secp256k1:return mr.secp256k1.unmarshalSecp256k1PublicKey(r);default:throw Vf(t.Type??"unknown")}}async function Hf(e){let t=ve.decode(e),r=t.Data??new Uint8Array;switch(t.Type){case wt.RSA:return mr.rsa.unmarshalRsaPrivateKey(r);case wt.Ed25519:return mr.ed25519.unmarshalEd25519PrivateKey(r);case wt.Secp256k1:return mr.secp256k1.unmarshalSecp256k1PrivateKey(r);default:throw Vf(t.Type??"RSA")}}var o1=Symbol.for("nodejs.util.inspect.custom"),qf=Object.values(Fr).map(e=>e.decoder).reduce((e,t)=>e.or(t),Fr.identity.decoder),zf=114,Ho=36,qo=37,_n=class{type;multihash;privateKey;publicKey;string;constructor(t){this.type=t.type,this.multihash=t.multihash,this.privateKey=t.privateKey,Object.defineProperty(this,"string",{enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return`PeerId(${this.toString()})`}[Cc]=!0;toString(){return this.string==null&&(this.string=zt.encode(this.multihash.bytes).slice(1)),this.string}toCID(){return cr.createV1(zf,this.multihash)}toBytes(){return this.multihash.bytes}toJSON(){return this.toString()}equals(t){if(t instanceof Uint8Array)return Rt(this.multihash.bytes,t);if(typeof t=="string")return a1(t).equals(this);if(t?.multihash?.bytes!=null)return Rt(this.multihash.bytes,t.multihash.bytes);throw new Error("not valid Id")}[o1](){return`PeerId(${this.toString()})`}},Wr=class extends _n{type="RSA";publicKey;constructor(t){super({...t,type:"RSA"}),this.publicKey=t.publicKey}},$r=class extends _n{type="Ed25519";publicKey;constructor(t){super({...t,type:"Ed25519"}),this.publicKey=t.multihash.digest}},Zr=class extends _n{type="secp256k1";publicKey;constructor(t){super({...t,type:"secp256k1"}),this.publicKey=t.multihash.digest}};function a1(e,t){if(t=t??qf,e.charAt(0)==="1"||e.charAt(0)==="Q"){let r=gn(zt.decode(`z${e}`));return e.startsWith("12D")?new $r({multihash:r}):e.startsWith("16U")?new Zr({multihash:r}):new Wr({multihash:r})}return c1(qf.decode(e))}function c1(e){try{let t=gn(e);if(t.code===$e.code){if(t.digest.length===Ho)return new $r({multihash:t});if(t.digest.length===qo)return new Zr({multihash:t})}if(t.code===Ot.code)return new Wr({multihash:t})}catch{return f1(cr.decode(e))}throw new Error("Supplied PeerID CID is invalid")}function f1(e){if(e==null||e.multihash==null||e.version==null||e.version===1&&e.code!==zf)throw new Error("Supplied PeerID CID is invalid");let t=e.multihash;if(t.code===Ot.code)return new Wr({multihash:e.multihash});if(t.code===$e.code){if(t.digest.length===Ho)return new $r({multihash:e.multihash});if(t.digest.length===qo)return new Zr({multihash:e.multihash})}throw new Error("Supplied PeerID CID is invalid")}async function zo(e,t){return e.length===Ho?new $r({multihash:me($e.code,e),privateKey:t}):e.length===qo?new Zr({multihash:me($e.code,e),privateKey:t}):new Wr({multihash:await Ot.digest(e),publicKey:e,privateKey:t})}var Pi;(function(e){let t;e.codec=()=>(t==null&&(t=pr((r,n,i={})=>{if(i.lengthDelimited!==!1&&n.fork(),r.webtransportCerthashes!=null)for(let s of r.webtransportCerthashes)n.uint32(10),n.bytes(s);i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={webtransportCerthashes:[]},s=n==null?r.len:r.pos+n;for(;r.pos>>3){case 1:{i.webtransportCerthashes.push(r.bytes());break}default:{r.skipType(o&7);break}}}return i})),t),e.encode=r=>lr(r,e.codec()),e.decode=r=>ur(r,e.codec())})(Pi||(Pi={}));var Ln;(function(e){let t;e.codec=()=>(t==null&&(t=pr((r,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),r.identityKey!=null&&r.identityKey.byteLength>0&&(n.uint32(10),n.bytes(r.identityKey)),r.identitySig!=null&&r.identitySig.byteLength>0&&(n.uint32(18),n.bytes(r.identitySig)),r.extensions!=null&&(n.uint32(34),Pi.codec().encode(r.extensions,n)),i.lengthDelimited!==!1&&n.ldelim()},(r,n)=>{let i={identityKey:rt(0),identitySig:rt(0)},s=n==null?r.len:r.pos+n;for(;r.pos>>3){case 1:{i.identityKey=r.bytes();break}case 2:{i.identitySig=r.bytes();break}case 4:{i.extensions=Pi.codec().decode(r,r.uint32());break}default:{r.skipType(o&7);break}}}return i})),t),e.encode=r=>lr(r,e.codec()),e.decode=r=>ur(r,e.codec())})(Ln||(Ln={}));async function Gf(e,t,r){let n=await h1(e,Yf(t));if(e.publicKey==null)throw new Error("PublicKey was missing from local PeerId");return u1(e.publicKey,n,r)}function u1(e,t,r){return Ln.encode({identityKey:e,identitySig:t,extensions:r??{webtransportCerthashes:[]}}).subarray()}async function h1(e,t){if(e.privateKey==null)throw new Error("PrivateKey was missing from PeerId");return(await Hf(e.privateKey)).sign(t)}async function Go(e){return zo(e.identityKey)}function Yo(e){return Ln.decode(e)}function Yf(e){let t=It("noise-libp2p-static-key:");return e instanceof Uint8Array?Zt([t,e],t.length+e.length):(e.prepend(t),e)}async function Wo(e,t,r){let n=await zo(t.identityKey);if(!n.equals(r))throw new Error(`Payload identity key ${n.toString()} does not match expected remote peer ${r.toString()}`);let i=Yf(e);if(n.publicKey==null)throw new Error("PublicKey was missing from PeerId");if(t.identitySig==null)throw new Error("Signature was missing from message");if(!await Ff(n.publicKey).verify(i,t.identitySig))throw new Error("Static key doesn't match to peer that signed payload!");return n}function Rn(e){return!(!(e instanceof Uint8Array)&&!br(e)||e.byteLength!==32)}var l1=0,p1=4294967295,d1="Cipherstate has reached maximum n, a new handshake must be performed",ki=class{n;bytes;view;constructor(t=l1){this.n=t,this.bytes=rt(12),this.view=new DataView(this.bytes.buffer,this.bytes.byteOffset,this.bytes.byteLength),this.view.setUint32(4,t,!0)}increment(){this.n++,this.view.setUint32(4,this.n,!0)}getBytes(){return this.bytes}getUint64(){return this.n}assertValue(){if(this.n>p1)throw new Error(d1)}};var Ui=class{crypto;log;constructor(t,r){this.log=t.logger.forComponent("libp2p:noise:abstract-handshake"),this.crypto=r}encryptWithAd(t,r,n){let i=this.encrypt(t.k,t.n,r,n);return t.n.increment(),i}decryptWithAd(t,r,n,i){let{plaintext:s,valid:o}=this.decrypt(t.k,t.n,r,n,i);return o&&t.n.increment(),{plaintext:s,valid:o}}hasKey(t){return!this.isEmptyKey(t.k)}createEmptyKey(){return rt(32)}isEmptyKey(t){let r=this.createEmptyKey();return Rt(r,t)}encrypt(t,r,n,i){return r.assertValue(),this.crypto.chaCha20Poly1305Encrypt(i,r.getBytes(),n,t)}encryptAndHash(t,r){let n;return this.hasKey(t.cs)?n=this.encryptWithAd(t.cs,t.h,r):n=r,this.mixHash(t,n),n}decrypt(t,r,n,i,s){r.assertValue();let o=this.crypto.chaCha20Poly1305Decrypt(i,r.getBytes(),n,t,s);return o?{plaintext:o,valid:!0}:{plaintext:rt(0),valid:!1}}decryptAndHash(t,r){let n,i=!0;return this.hasKey(t.cs)?{plaintext:n,valid:i}=this.decryptWithAd(t.cs,t.h,r):n=r,this.mixHash(t,r),{plaintext:n,valid:i}}dh(t,r){try{let n=this.crypto.generateX25519SharedKey(t,r);return n.length===32?n:n.subarray(0,32)}catch(n){let i=n;return this.log.error("error deriving shared key",i),rt(32)}}mixHash(t,r){t.h=this.getHash(t.h,r)}getHash(t,r){return this.crypto.hashSHA256(new At(t,r))}mixKey(t,r){let[n,i]=this.crypto.getHKDF(t.ck,r);t.cs=this.initializeKey(i),t.ck=n}initializeKey(t){return{k:t,n:new ki}}initializeSymmetric(t){let r=It(t,"utf-8"),n=this.hashProtocolName(r),i=n,s=this.createEmptyKey();return{cs:this.initializeKey(s),ck:i,h:n}}hashProtocolName(t){if(t.length<=32){let r=rt(32);return r.set(t),r}else return this.getHash(t,rt(0))}split(t){let[r,n]=this.crypto.getHKDF(t.ck,rt(0)),i=this.initializeKey(r),s=this.initializeKey(n);return{cs1:i,cs2:s}}writeMessageRegular(t,r){let n=this.encryptWithAd(t,rt(0),r),i=this.createEmptyKey(),s=rt(0);return{ne:i,ns:s,ciphertext:n}}readMessageRegular(t,r){return this.decryptWithAd(t,rt(0),r.ciphertext)}};var Ki=class extends Ui{initializeInitiator(t,r,n,i){let s="Noise_XX_25519_ChaChaPoly_SHA256",o=this.initializeSymmetric(s);this.mixHash(o,t);let a=rt(32);return{ss:o,s:r,rs:n,psk:i,re:a}}initializeResponder(t,r,n,i){let s="Noise_XX_25519_ChaChaPoly_SHA256",o=this.initializeSymmetric(s);this.mixHash(o,t);let a=rt(32);return{ss:o,s:r,rs:n,psk:i,re:a}}writeMessageA(t,r,n){let i=rt(0);n!==void 0?t.e=n:t.e=this.crypto.generateX25519KeyPair();let s=t.e.publicKey;this.mixHash(t.ss,s);let o=this.encryptAndHash(t.ss,r);return{ne:s,ns:i,ciphertext:o}}writeMessageB(t,r){t.e=this.crypto.generateX25519KeyPair();let n=t.e.publicKey;this.mixHash(t.ss,n),this.mixKey(t.ss,this.dh(t.e.privateKey,t.re));let i=t.s.publicKey,s=this.encryptAndHash(t.ss,i);this.mixKey(t.ss,this.dh(t.s.privateKey,t.re));let o=this.encryptAndHash(t.ss,r);return{ne:n,ns:s,ciphertext:o}}writeMessageC(t,r){let n=t.s.publicKey,i=this.encryptAndHash(t.ss,n);this.mixKey(t.ss,this.dh(t.s.privateKey,t.re));let s=this.encryptAndHash(t.ss,r),a={ne:this.createEmptyKey(),ns:i,ciphertext:s},{cs1:c,cs2:f}=this.split(t.ss);return{h:t.ss.h,messageBuffer:a,cs1:c,cs2:f}}readMessageA(t,r){return Rn(r.ne)&&(t.re=r.ne),this.mixHash(t.ss,t.re),this.decryptAndHash(t.ss,r.ciphertext)}readMessageB(t,r){if(Rn(r.ne)&&(t.re=r.ne),this.mixHash(t.ss,t.re),!t.e)throw new Error("Handshake state `e` param is missing.");this.mixKey(t.ss,this.dh(t.e.privateKey,t.re));let{plaintext:n,valid:i}=this.decryptAndHash(t.ss,r.ns);i&&Rn(n)&&(t.rs=n),this.mixKey(t.ss,this.dh(t.e.privateKey,t.rs));let{plaintext:s,valid:o}=this.decryptAndHash(t.ss,r.ciphertext);return{plaintext:s,valid:i&&o}}readMessageC(t,r){let{plaintext:n,valid:i}=this.decryptAndHash(t.ss,r.ns);if(i&&Rn(n)&&(t.rs=n),!t.e)throw new Error("Handshake state `e` param is missing.");this.mixKey(t.ss,this.dh(t.e.privateKey,t.rs));let{plaintext:s,valid:o}=this.decryptAndHash(t.ss,r.ciphertext),{cs1:a,cs2:c}=this.split(t.ss);return{h:t.ss.h,plaintext:s,valid:i&&o,cs1:a,cs2:c}}initSession(t,r,n){let i=this.createEmptyKey(),s=rt(32),o;return t?o=this.initializeInitiator(r,n,s,i):o=this.initializeResponder(r,n,s,i),{hs:o,i:t,mc:0}}sendMessage(t,r,n){let i;if(t.mc===0)i=this.writeMessageA(t.hs,r,n);else if(t.mc===1)i=this.writeMessageB(t.hs,r);else if(t.mc===2){let{h:s,messageBuffer:o,cs1:a,cs2:c}=this.writeMessageC(t.hs,r);i=o,t.h=s,t.cs1=a,t.cs2=c}else if(t.mc>2)if(t.i){if(!t.cs1)throw new Error("CS1 (cipher state) is not defined");i=this.writeMessageRegular(t.cs1,r)}else{if(!t.cs2)throw new Error("CS2 (cipher state) is not defined");i=this.writeMessageRegular(t.cs2,r)}else throw new Error("Session invalid.");return t.mc++,i}recvMessage(t,r){let n=rt(0),i=!1;if(t.mc===0)({plaintext:n,valid:i}=this.readMessageA(t.hs,r));else if(t.mc===1)({plaintext:n,valid:i}=this.readMessageB(t.hs,r));else if(t.mc===2){let{h:s,plaintext:o,valid:a,cs1:c,cs2:f}=this.readMessageC(t.hs,r);n=o,i=a,t.h=s,t.cs1=c,t.cs2=f}return t.mc++,{plaintext:n,valid:i}}};function Wf(e,t){!t.enabled||!Er||(t(`LOCAL_STATIC_PUBLIC_KEY ${Et(e.publicKey,"hex")}`),t(`LOCAL_STATIC_PRIVATE_KEY ${Et(e.privateKey,"hex")}`))}function $o(e,t){!t.enabled||!Er||(e?(t(`LOCAL_PUBLIC_EPHEMERAL_KEY ${Et(e.publicKey,"hex")}`),t(`LOCAL_PRIVATE_EPHEMERAL_KEY ${Et(e.privateKey,"hex")}`)):t("Missing local ephemeral keys."))}function $f(e,t){!t.enabled||!Er||t(`REMOTE_STATIC_PUBLIC_KEY ${Et(e.subarray(),"hex")}`)}function Zo(e,t){!t.enabled||!Er||t(`REMOTE_EPHEMERAL_PUBLIC_KEY ${Et(e.subarray(),"hex")}`)}function Zf(e,t){!t.enabled||!Er||(e.cs1&&e.cs2?(t(`CIPHER_STATE_1 ${e.cs1.n.getUint64()} ${Et(e.cs1.k,"hex")}`),t(`CIPHER_STATE_2 ${e.cs2.n.getUint64()} ${Et(e.cs2.k,"hex")}`)):t("Missing cipher state."))}var Oi=class{isInitiator;session;remotePeer;remoteExtensions={webtransportCerthashes:[]};payload;connection;xx;staticKeypair;prologue;log;constructor(t,r,n,i,s,o,a,c,f){this.log=t.logger.forComponent("libp2p:noise:xxhandshake"),this.isInitiator=r,this.payload=n,this.prologue=i,this.staticKeypair=o,this.connection=a,c&&(this.remotePeer=c),this.xx=f??new Ki(t,s),this.session=this.xx.initSession(this.isInitiator,this.prologue,this.staticKeypair)}async propose(){if(Wf(this.session.hs.s,this.log),this.isInitiator){this.log.trace("Stage 0 - Initiator starting to send first message.");let t=this.xx.sendMessage(this.session,rt(0));await this.connection.write(t0(t)),this.log.trace("Stage 0 - Initiator finished sending first message."),$o(this.session.hs.e,this.log)}else{this.log.trace("Stage 0 - Responder waiting to receive first message...");let t=n0((await this.connection.read()).subarray()),{valid:r}=this.xx.recvMessage(this.session,t);if(!r)throw new rr("xx handshake stage 0 validation fail");this.log.trace("Stage 0 - Responder received first message."),Zo(this.session.hs.re,this.log)}}async exchange(){if(this.isInitiator){this.log.trace("Stage 1 - Initiator waiting to receive first message from responder...");let t=i0((await this.connection.read()).subarray()),{plaintext:r,valid:n}=this.xx.recvMessage(this.session,t);if(!n)throw new rr("xx handshake stage 1 validation fail");this.log.trace("Stage 1 - Initiator received the message."),Zo(this.session.hs.re,this.log),$f(this.session.hs.rs,this.log),this.log.trace("Initiator going to check remote's signature...");try{let i=Yo(r);this.remotePeer=this.remotePeer||await Go(i),await Wo(this.session.hs.rs,i,this.remotePeer),this.setRemoteNoiseExtension(i.extensions)}catch(i){let s=i;throw new cn(`Error occurred while verifying signed payload: ${s.message}`)}this.log.trace("All good with the signature!")}else{this.log.trace("Stage 1 - Responder sending out first message with signed payload and static key.");let t=this.xx.sendMessage(this.session,this.payload);await this.connection.write(e0(t)),this.log.trace("Stage 1 - Responder sent the second handshake message with signed payload."),$o(this.session.hs.e,this.log)}}async finish(){if(this.isInitiator){this.log.trace("Stage 2 - Initiator sending third handshake message.");let t=this.xx.sendMessage(this.session,this.payload);await this.connection.write(r0(t)),this.log.trace("Stage 2 - Initiator sent message with signed payload.")}else{this.log.trace("Stage 2 - Responder waiting for third handshake message...");let t=s0((await this.connection.read()).subarray()),{plaintext:r,valid:n}=this.xx.recvMessage(this.session,t);if(!n)throw new rr("xx handshake stage 2 validation fail");this.log.trace("Stage 2 - Responder received the message, finished handshake.");try{let i=Yo(r);this.remotePeer=this.remotePeer||await Go(i),await Wo(this.session.hs.rs,i,this.remotePeer),this.setRemoteNoiseExtension(i.extensions)}catch(i){let s=i;throw new cn(`Error occurred while verifying signed payload: ${s.message}`)}}Zf(this.session,this.log)}encrypt(t,r){let n=this.getCS(r);return this.xx.encryptWithAd(n,rt(0),t)}decrypt(t,r,n){let i=this.getCS(r,!1);return this.xx.decryptWithAd(i,rt(0),t,n)}getRemoteStaticKey(){return this.session.hs.rs}getCS(t,r=!0){if(!t.cs1||!t.cs2)throw new rr("Handshake not completed properly, cipher state does not exist.");return this.isInitiator?r?t.cs1:t.cs2:r?t.cs2:t.cs1}setRemoteNoiseExtension(t){t&&(this.remoteExtensions=t)}};function Xf(e){return{xxHandshakeSuccesses:e.registerCounter("libp2p_noise_xxhandshake_successes_total",{help:"Total count of noise xxHandshakes successes_"}),xxHandshakeErrors:e.registerCounter("libp2p_noise_xxhandshake_error_total",{help:"Total count of noise xxHandshakes errors"}),encryptedPackets:e.registerCounter("libp2p_noise_encrypted_packets_total",{help:"Total count of noise encrypted packets successfully"}),decryptedPackets:e.registerCounter("libp2p_noise_decrypted_packets_total",{help:"Total count of noise decrypted packets"}),decryptErrors:e.registerCounter("libp2p_noise_decrypt_errors_total",{help:"Total count of noise decrypt errors"})}}var Mi=class{protocol="/noise";crypto;prologue;staticKeys;extensions;metrics;components;constructor(t,r={}){let{staticNoiseKey:n,extensions:i,crypto:s,prologueBytes:o}=r,{metrics:a}=t;this.components=t,this.crypto=s??ja,this.extensions=i,this.metrics=a?Xf(a):void 0,n?this.staticKeys=this.crypto.generateX25519KeyPairFromSeed(n):this.staticKeys=this.crypto.generateX25519KeyPair(),this.prologue=o??rt(0)}async secureOutbound(t,r,n){let i=Zi(r,{lengthEncoder:Lr,lengthDecoder:on,maxDataLength:65535}),s=await this.performHandshake({connection:i,isInitiator:!0,localPeer:t,remotePeer:n}),o=await this.createSecureConnection(i,s);return r.source=o.source,r.sink=o.sink,{conn:r,remoteExtensions:s.remoteExtensions,remotePeer:s.remotePeer}}async secureInbound(t,r,n){let i=Zi(r,{lengthEncoder:Lr,lengthDecoder:on,maxDataLength:65535}),s=await this.performHandshake({connection:i,isInitiator:!1,localPeer:t,remotePeer:n}),o=await this.createSecureConnection(i,s);return r.source=o.source,r.sink=o.sink,{conn:r,remotePeer:s.remotePeer,remoteExtensions:s.remoteExtensions}}async performHandshake(t){let r=await Gf(t.localPeer,this.staticKeys.publicKey,this.extensions);return this.performXXHandshake(t,r)}async performXXHandshake(t,r){let{isInitiator:n,remotePeer:i,connection:s}=t,o=new Oi(this.components,n,r,this.prologue,this.crypto,this.staticKeys,s,i);try{await o.propose(),await o.exchange(),await o.finish(),this.metrics?.xxHandshakeSuccesses.increment()}catch(a){if(this.metrics?.xxHandshakeErrors.increment(),a instanceof Error)throw a.message=`Error occurred during XX handshake: ${a.message}`,a}return o}async createSecureConnection(t,r){let[n,i]=ya(),s=t.unwrap();return await ga(n,c0(r,this.metrics),s,o=>Jr(o,{lengthDecoder:on}),f0(r,this.metrics),n),i}};function y1(e={}){return t=>new Mi(t,e)}return uu(x1);})(); +/*! Bundled license information: + +@noble/ciphers/esm/utils.js: + (*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) *) + +@noble/hashes/esm/utils.js: + (*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *) + +@noble/curves/esm/abstract/utils.js: + (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *) + +@noble/curves/esm/abstract/modular.js: + (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *) + +@noble/curves/esm/abstract/curve.js: + (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *) + +@noble/curves/esm/abstract/edwards.js: + (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *) + +@noble/curves/esm/abstract/montgomery.js: + (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *) + +@noble/curves/esm/ed25519.js: + (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *) + +@noble/curves/esm/abstract/weierstrass.js: + (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *) + +@noble/curves/esm/_shortw_utils.js: + (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *) + +@noble/curves/esm/secp256k1.js: + (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *) +*/ +return ChainsafeLibp2PNoise})); diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/basic.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/basic.d.ts new file mode 100644 index 000000000..5b8bbb19b --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/basic.d.ts @@ -0,0 +1,5 @@ +export type bytes = Uint8Array; +export type bytes32 = Uint8Array; +export type bytes16 = Uint8Array; +export type uint64 = number; +//# sourceMappingURL=basic.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/basic.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/basic.d.ts.map new file mode 100644 index 000000000..eeee2bada --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/basic.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../../../src/@types/basic.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG,UAAU,CAAA;AAC9B,MAAM,MAAM,OAAO,GAAG,UAAU,CAAA;AAChC,MAAM,MAAM,OAAO,GAAG,UAAU,CAAA;AAEhC,MAAM,MAAM,MAAM,GAAG,MAAM,CAAA"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/basic.js b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/basic.js new file mode 100644 index 000000000..f839d2b8c --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/basic.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=basic.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/basic.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/basic.js.map new file mode 100644 index 000000000..aa623d697 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/basic.js.map @@ -0,0 +1 @@ +{"version":3,"file":"basic.js","sourceRoot":"","sources":["../../../src/@types/basic.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake-interface.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake-interface.d.ts new file mode 100644 index 000000000..c9f3ddb33 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake-interface.d.ts @@ -0,0 +1,15 @@ +import type { NoiseSession } from './handshake.js'; +import type { NoiseExtensions } from '../proto/payload.js'; +import type { PeerId } from '@libp2p/interface'; +import type { Uint8ArrayList } from 'uint8arraylist'; +export interface IHandshake { + session: NoiseSession; + remotePeer: PeerId; + remoteExtensions: NoiseExtensions; + encrypt(plaintext: Uint8Array | Uint8ArrayList, session: NoiseSession): Uint8Array | Uint8ArrayList; + decrypt(ciphertext: Uint8Array | Uint8ArrayList, session: NoiseSession, dst?: Uint8Array): { + plaintext: Uint8Array | Uint8ArrayList; + valid: boolean; + }; +} +//# sourceMappingURL=handshake-interface.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake-interface.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake-interface.d.ts.map new file mode 100644 index 000000000..e2f649857 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake-interface.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"handshake-interface.d.ts","sourceRoot":"","sources":["../../../src/@types/handshake-interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,YAAY,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,eAAe,CAAA;IACjC,OAAO,CAAC,SAAS,EAAE,UAAU,GAAG,cAAc,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU,GAAG,cAAc,CAAA;IACnG,OAAO,CAAC,UAAU,EAAE,UAAU,GAAG,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG;QAAE,SAAS,EAAE,UAAU,GAAG,cAAc,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAA;CACtJ"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake-interface.js b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake-interface.js new file mode 100644 index 000000000..6cb504ea8 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake-interface.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=handshake-interface.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake-interface.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake-interface.js.map new file mode 100644 index 000000000..f59aae35f --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake-interface.js.map @@ -0,0 +1 @@ +{"version":3,"file":"handshake-interface.js","sourceRoot":"","sources":["../../../src/@types/handshake-interface.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake.d.ts new file mode 100644 index 000000000..e200280b4 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake.d.ts @@ -0,0 +1,41 @@ +import type { bytes, bytes32, uint64 } from './basic.js'; +import type { KeyPair } from './libp2p.js'; +import type { Nonce } from '../nonce.js'; +import type { Uint8ArrayList } from 'uint8arraylist'; +export type Hkdf = [bytes, bytes, bytes]; +export interface MessageBuffer { + ne: bytes32; + ns: Uint8Array | Uint8ArrayList; + ciphertext: Uint8Array | Uint8ArrayList; +} +export interface CipherState { + k: bytes32; + n: Nonce; +} +export interface SymmetricState { + cs: CipherState; + ck: bytes32; + h: bytes32; +} +export interface HandshakeState { + ss: SymmetricState; + s: KeyPair; + e?: KeyPair; + rs: Uint8Array | Uint8ArrayList; + re: bytes32; + psk: bytes32; +} +export interface NoiseSession { + hs: HandshakeState; + h?: bytes32; + cs1?: CipherState; + cs2?: CipherState; + mc: uint64; + i: boolean; +} +export interface INoisePayload { + identityKey: bytes; + identitySig: bytes; + data: bytes; +} +//# sourceMappingURL=handshake.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake.d.ts.map new file mode 100644 index 000000000..dba1124b9 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"handshake.d.ts","sourceRoot":"","sources":["../../../src/@types/handshake.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,MAAM,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;AAExC,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAA;IACX,EAAE,EAAE,UAAU,GAAG,cAAc,CAAA;IAC/B,UAAU,EAAE,UAAU,GAAG,cAAc,CAAA;CACxC;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,OAAO,CAAA;IAGV,CAAC,EAAE,KAAK,CAAA;CACT;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,WAAW,CAAA;IACf,EAAE,EAAE,OAAO,CAAA;IACX,CAAC,EAAE,OAAO,CAAA;CACX;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,cAAc,CAAA;IAClB,CAAC,EAAE,OAAO,CAAA;IACV,CAAC,CAAC,EAAE,OAAO,CAAA;IACX,EAAE,EAAE,UAAU,GAAG,cAAc,CAAA;IAC/B,EAAE,EAAE,OAAO,CAAA;IACX,GAAG,EAAE,OAAO,CAAA;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,cAAc,CAAA;IAClB,CAAC,CAAC,EAAE,OAAO,CAAA;IACX,GAAG,CAAC,EAAE,WAAW,CAAA;IACjB,GAAG,CAAC,EAAE,WAAW,CAAA;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,CAAC,EAAE,OAAO,CAAA;CACX;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,KAAK,CAAA;IAClB,WAAW,EAAE,KAAK,CAAA;IAClB,IAAI,EAAE,KAAK,CAAA;CACZ"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake.js b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake.js new file mode 100644 index 000000000..39c1bf13f --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=handshake.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake.js.map new file mode 100644 index 000000000..bed86a99f --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/handshake.js.map @@ -0,0 +1 @@ +{"version":3,"file":"handshake.js","sourceRoot":"","sources":["../../../src/@types/handshake.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/libp2p.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/libp2p.d.ts new file mode 100644 index 000000000..3926559f1 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/libp2p.d.ts @@ -0,0 +1,10 @@ +import type { bytes32 } from './basic.js'; +import type { NoiseExtensions } from '../proto/payload.js'; +import type { ConnectionEncrypter } from '@libp2p/interface'; +export interface KeyPair { + publicKey: bytes32; + privateKey: bytes32; +} +export interface INoiseConnection extends ConnectionEncrypter { +} +//# sourceMappingURL=libp2p.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/libp2p.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/libp2p.d.ts.map new file mode 100644 index 000000000..91ead4c05 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/libp2p.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"libp2p.d.ts","sourceRoot":"","sources":["../../../src/@types/libp2p.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAE5D,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,gBAAiB,SAAQ,mBAAmB,CAAC,eAAe,CAAC;CAAG"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/libp2p.js b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/libp2p.js new file mode 100644 index 000000000..9b5e5678e --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/libp2p.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=libp2p.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/libp2p.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/libp2p.js.map new file mode 100644 index 000000000..efd4520e6 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/@types/libp2p.js.map @@ -0,0 +1 @@ +{"version":3,"file":"libp2p.js","sourceRoot":"","sources":["../../../src/@types/libp2p.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/constants.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/constants.d.ts new file mode 100644 index 000000000..576fb1857 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/constants.d.ts @@ -0,0 +1,4 @@ +export declare const NOISE_MSG_MAX_LENGTH_BYTES = 65535; +export declare const NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG: number; +export declare const DUMP_SESSION_KEYS: boolean; +//# sourceMappingURL=constants.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/constants.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/constants.d.ts.map new file mode 100644 index 000000000..8bb0fa819 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/constants.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,0BAA0B,QAAQ,CAAA;AAC/C,eAAO,MAAM,sCAAsC,QAAkC,CAAA;AAErF,eAAO,MAAM,iBAAiB,SAAsD,CAAA"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/constants.js b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/constants.js new file mode 100644 index 000000000..e1381b284 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/constants.js @@ -0,0 +1,4 @@ +export const NOISE_MSG_MAX_LENGTH_BYTES = 65535; +export const NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG = NOISE_MSG_MAX_LENGTH_BYTES - 16; +export const DUMP_SESSION_KEYS = Boolean(globalThis.process?.env?.DUMP_SESSION_KEYS); +//# sourceMappingURL=constants.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/constants.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/constants.js.map new file mode 100644 index 000000000..d21a05013 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/constants.js.map @@ -0,0 +1 @@ +{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAA;AAC/C,MAAM,CAAC,MAAM,sCAAsC,GAAG,0BAA0B,GAAG,EAAE,CAAA;AAErF,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAA"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto.d.ts new file mode 100644 index 000000000..f1b45e7c0 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto.d.ts @@ -0,0 +1,14 @@ +import { type Uint8ArrayList } from 'uint8arraylist'; +import type { bytes32 } from './@types/basic.js'; +import type { Hkdf } from './@types/handshake.js'; +import type { KeyPair } from './@types/libp2p.js'; +export interface ICryptoInterface { + hashSHA256(data: Uint8Array | Uint8ArrayList): Uint8Array; + getHKDF(ck: bytes32, ikm: Uint8Array): Hkdf; + generateX25519KeyPair(): KeyPair; + generateX25519KeyPairFromSeed(seed: Uint8Array): KeyPair; + generateX25519SharedKey(privateKey: Uint8Array | Uint8ArrayList, publicKey: Uint8Array | Uint8ArrayList): Uint8Array; + chaCha20Poly1305Encrypt(plaintext: Uint8Array | Uint8ArrayList, nonce: Uint8Array, ad: Uint8Array, k: bytes32): Uint8ArrayList | Uint8Array; + chaCha20Poly1305Decrypt(ciphertext: Uint8Array | Uint8ArrayList, nonce: Uint8Array, ad: Uint8Array, k: bytes32, dst?: Uint8Array): Uint8ArrayList | Uint8Array | null; +} +//# sourceMappingURL=crypto.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto.d.ts.map new file mode 100644 index 000000000..c33161787 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,CAAA;IAEzD,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAAA;IAE3C,qBAAqB,IAAI,OAAO,CAAA;IAChC,6BAA6B,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAA;IACxD,uBAAuB,CAAC,UAAU,EAAE,UAAU,GAAG,cAAc,EAAE,SAAS,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,CAAA;IAEpH,uBAAuB,CAAC,SAAS,EAAE,UAAU,GAAG,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,GAAG,cAAc,GAAG,UAAU,CAAA;IAC3I,uBAAuB,CAAC,UAAU,EAAE,UAAU,GAAG,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,GAAG,IAAI,CAAA;CACtK"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto.js b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto.js new file mode 100644 index 000000000..bb3bbc1aa --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto.js @@ -0,0 +1,2 @@ +import {} from 'uint8arraylist'; +//# sourceMappingURL=crypto.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto.js.map new file mode 100644 index 000000000..d093197d9 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,MAAM,gBAAgB,CAAA"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.browser.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.browser.d.ts new file mode 100644 index 000000000..43a189404 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.browser.d.ts @@ -0,0 +1,2 @@ +export declare const defaultCrypto: import("../crypto.js").ICryptoInterface; +//# sourceMappingURL=index.browser.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.browser.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.browser.d.ts.map new file mode 100644 index 000000000..c8c08581c --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.browser.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../../../src/crypto/index.browser.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,yCAAe,CAAA"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.browser.js b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.browser.js new file mode 100644 index 000000000..4be4f6ef7 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.browser.js @@ -0,0 +1,3 @@ +import { pureJsCrypto } from './js.js'; +export const defaultCrypto = pureJsCrypto; +//# sourceMappingURL=index.browser.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.browser.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.browser.js.map new file mode 100644 index 000000000..ec7d52f01 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.browser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.browser.js","sourceRoot":"","sources":["../../../src/crypto/index.browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEtC,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CAAA"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.d.ts new file mode 100644 index 000000000..cf8aff630 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.d.ts @@ -0,0 +1,3 @@ +import type { ICryptoInterface } from '../crypto.js'; +export declare const defaultCrypto: ICryptoInterface; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.d.ts.map new file mode 100644 index 000000000..819dbc96f --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/crypto/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAkHpD,eAAO,MAAM,aAAa,EAAE,gBAyF3B,CAAA"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.js b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.js new file mode 100644 index 000000000..ceba87da4 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.js @@ -0,0 +1,186 @@ +import crypto from 'node:crypto'; +import { newInstance, ChaCha20Poly1305 } from '@chainsafe/as-chacha20poly1305'; +import { digest } from '@chainsafe/as-sha256'; +import { Uint8ArrayList } from 'uint8arraylist'; +import { isElectronMain } from 'wherearewe'; +import { pureJsCrypto } from './js.js'; +const ctx = newInstance(); +const asImpl = new ChaCha20Poly1305(ctx); +const CHACHA_POLY1305 = 'chacha20-poly1305'; +const PKCS8_PREFIX = Buffer.from([0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x6e, 0x04, 0x22, 0x04, 0x20]); +const X25519_PREFIX = Buffer.from([0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x6e, 0x03, 0x21, 0x00]); +const nodeCrypto = { + hashSHA256(data) { + const hash = crypto.createHash('sha256'); + if (data instanceof Uint8Array) { + return hash.update(data).digest(); + } + for (const buf of data) { + hash.update(buf); + } + return hash.digest(); + }, + chaCha20Poly1305Encrypt(plaintext, nonce, ad, k) { + const cipher = crypto.createCipheriv(CHACHA_POLY1305, k, nonce, { + authTagLength: 16 + }); + cipher.setAAD(ad, { plaintextLength: plaintext.byteLength }); + if (plaintext instanceof Uint8Array) { + const updated = cipher.update(plaintext); + const final = cipher.final(); + const tag = cipher.getAuthTag(); + return Buffer.concat([updated, tag, final], updated.byteLength + tag.byteLength + final.byteLength); + } + const output = new Uint8ArrayList(); + for (const buf of plaintext) { + output.append(cipher.update(buf)); + } + const final = cipher.final(); + if (final.byteLength > 0) { + output.append(final); + } + output.append(cipher.getAuthTag()); + return output; + }, + chaCha20Poly1305Decrypt(ciphertext, nonce, ad, k, _dst) { + const authTag = ciphertext.subarray(ciphertext.length - 16); + const decipher = crypto.createDecipheriv(CHACHA_POLY1305, k, nonce, { + authTagLength: 16 + }); + let text; + if (ciphertext instanceof Uint8Array) { + text = ciphertext.subarray(0, ciphertext.length - 16); + } + else { + text = ciphertext.sublist(0, ciphertext.length - 16); + } + decipher.setAAD(ad, { + plaintextLength: text.byteLength + }); + decipher.setAuthTag(authTag); + if (text instanceof Uint8Array) { + const output = decipher.update(text); + const final = decipher.final(); + if (final.byteLength > 0) { + return Buffer.concat([output, final], output.byteLength + final.byteLength); + } + return output; + } + const output = new Uint8ArrayList(); + for (const buf of text) { + output.append(decipher.update(buf)); + } + const final = decipher.final(); + if (final.byteLength > 0) { + output.append(final); + } + return output; + } +}; +const asCrypto = { + hashSHA256(data) { + return digest(data.subarray()); + }, + chaCha20Poly1305Encrypt(plaintext, nonce, ad, k) { + return asImpl.seal(k, nonce, plaintext.subarray(), ad); + }, + chaCha20Poly1305Decrypt(ciphertext, nonce, ad, k, dst) { + return asImpl.open(k, nonce, ciphertext.subarray(), ad, dst); + } +}; +// benchmarks show that for chacha20poly1305 +// the as implementation is faster for smaller payloads(<1200) +// and the node implementation is faster for larger payloads +export const defaultCrypto = { + ...pureJsCrypto, + hashSHA256(data) { + return nodeCrypto.hashSHA256(data); + }, + chaCha20Poly1305Encrypt(plaintext, nonce, ad, k) { + if (plaintext.byteLength < 1200) { + return asCrypto.chaCha20Poly1305Encrypt(plaintext, nonce, ad, k); + } + return nodeCrypto.chaCha20Poly1305Encrypt(plaintext, nonce, ad, k); + }, + chaCha20Poly1305Decrypt(ciphertext, nonce, ad, k, dst) { + if (ciphertext.byteLength < 1200) { + return asCrypto.chaCha20Poly1305Decrypt(ciphertext, nonce, ad, k, dst); + } + return nodeCrypto.chaCha20Poly1305Decrypt(ciphertext, nonce, ad, k, dst); + }, + generateX25519KeyPair() { + const { publicKey, privateKey } = crypto.generateKeyPairSync('x25519', { + publicKeyEncoding: { + type: 'spki', + format: 'der' + }, + privateKeyEncoding: { + type: 'pkcs8', + format: 'der' + } + }); + return { + publicKey: publicKey.subarray(X25519_PREFIX.length), + privateKey: privateKey.subarray(PKCS8_PREFIX.length) + }; + }, + generateX25519KeyPairFromSeed(seed) { + const privateKey = crypto.createPrivateKey({ + key: Buffer.concat([ + PKCS8_PREFIX, + seed + ], PKCS8_PREFIX.byteLength + seed.byteLength), + type: 'pkcs8', + format: 'der' + }); + const publicKey = crypto.createPublicKey(privateKey) + .export({ + type: 'spki', + format: 'der' + }).subarray(X25519_PREFIX.length); + return { + publicKey, + privateKey: seed + }; + }, + generateX25519SharedKey(privateKey, publicKey) { + if (publicKey instanceof Uint8Array) { + publicKey = Buffer.concat([ + X25519_PREFIX, + publicKey + ], X25519_PREFIX.byteLength + publicKey.byteLength); + } + else { + publicKey.prepend(X25519_PREFIX); + publicKey = publicKey.subarray(); + } + if (privateKey instanceof Uint8Array) { + privateKey = Buffer.concat([ + PKCS8_PREFIX, + privateKey + ], PKCS8_PREFIX.byteLength + privateKey.byteLength); + } + else { + privateKey.prepend(PKCS8_PREFIX); + privateKey = privateKey.subarray(); + } + return crypto.diffieHellman({ + publicKey: crypto.createPublicKey({ + key: Buffer.from(publicKey, publicKey.byteOffset, publicKey.byteLength), + type: 'spki', + format: 'der' + }), + privateKey: crypto.createPrivateKey({ + key: Buffer.from(privateKey, privateKey.byteOffset, privateKey.byteLength), + type: 'pkcs8', + format: 'der' + }) + }); + } +}; +// no chacha20-poly1305 in electron https://github.com/electron/electron/issues/24024 +if (isElectronMain) { + defaultCrypto.chaCha20Poly1305Encrypt = asCrypto.chaCha20Poly1305Encrypt; + defaultCrypto.chaCha20Poly1305Decrypt = asCrypto.chaCha20Poly1305Decrypt; +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.js.map new file mode 100644 index 000000000..b64808ea0 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/crypto/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/js.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/js.d.ts new file mode 100644 index 000000000..4020b8611 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/js.d.ts @@ -0,0 +1,3 @@ +import type { ICryptoInterface } from '../crypto.js'; +export declare const pureJsCrypto: ICryptoInterface; +//# sourceMappingURL=js.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/js.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/js.d.ts.map new file mode 100644 index 000000000..8a7973b5b --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/js.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"js.d.ts","sourceRoot":"","sources":["../../../src/crypto/js.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAGpD,eAAO,MAAM,YAAY,EAAE,gBA+C1B,CAAA"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/js.js b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/js.js new file mode 100644 index 000000000..2dba4a27f --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/js.js @@ -0,0 +1,43 @@ +import { chacha20poly1305 } from '@noble/ciphers/chacha'; +import { x25519 } from '@noble/curves/ed25519'; +import { extract, expand } from '@noble/hashes/hkdf'; +import { sha256 } from '@noble/hashes/sha256'; +export const pureJsCrypto = { + hashSHA256(data) { + return sha256(data.subarray()); + }, + getHKDF(ck, ikm) { + const prk = extract(sha256, ikm, ck); + const okmU8Array = expand(sha256, prk, undefined, 96); + const okm = okmU8Array; + const k1 = okm.subarray(0, 32); + const k2 = okm.subarray(32, 64); + const k3 = okm.subarray(64, 96); + return [k1, k2, k3]; + }, + generateX25519KeyPair() { + const secretKey = x25519.utils.randomPrivateKey(); + const publicKey = x25519.getPublicKey(secretKey); + return { + publicKey, + privateKey: secretKey + }; + }, + generateX25519KeyPairFromSeed(seed) { + const publicKey = x25519.getPublicKey(seed); + return { + publicKey, + privateKey: seed + }; + }, + generateX25519SharedKey(privateKey, publicKey) { + return x25519.getSharedSecret(privateKey.subarray(), publicKey.subarray()); + }, + chaCha20Poly1305Encrypt(plaintext, nonce, ad, k) { + return chacha20poly1305(k, nonce, ad).encrypt(plaintext.subarray()); + }, + chaCha20Poly1305Decrypt(ciphertext, nonce, ad, k, dst) { + return chacha20poly1305(k, nonce, ad).decrypt(ciphertext.subarray(), dst); + } +}; +//# sourceMappingURL=js.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/js.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/js.js.map new file mode 100644 index 000000000..274864d01 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/js.js.map @@ -0,0 +1 @@ +{"version":3,"file":"js.js","sourceRoot":"","sources":["../../../src/crypto/js.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAO7C,MAAM,CAAC,MAAM,YAAY,GAAqB;IAC5C,UAAU,CAAE,IAAiC;QAC3C,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;IAChC,CAAC;IAED,OAAO,CAAE,EAAW,EAAE,GAAe;QACnC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA;QACpC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,CAAA;QACrD,MAAM,GAAG,GAAG,UAAU,CAAA;QAEtB,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QAC9B,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAC/B,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAE/B,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;IACrB,CAAC;IAED,qBAAqB;QACnB,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAA;QACjD,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;QAEhD,OAAO;YACL,SAAS;YACT,UAAU,EAAE,SAAS;SACtB,CAAA;IACH,CAAC;IAED,6BAA6B,CAAE,IAAgB;QAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QAE3C,OAAO;YACL,SAAS;YACT,UAAU,EAAE,IAAI;SACjB,CAAA;IACH,CAAC;IAED,uBAAuB,CAAE,UAAuC,EAAE,SAAsC;QACtG,OAAO,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC5E,CAAC;IAED,uBAAuB,CAAE,SAAsC,EAAE,KAAiB,EAAE,EAAc,EAAE,CAAU;QAC5G,OAAO,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAA;IACrE,CAAC;IAED,uBAAuB,CAAE,UAAuC,EAAE,KAAiB,EAAE,EAAc,EAAE,CAAU,EAAE,GAAgB;QAC/H,OAAO,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAA;IAC3E,CAAC;CACF,CAAA"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/streaming.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/streaming.d.ts new file mode 100644 index 000000000..a6fffb234 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/streaming.d.ts @@ -0,0 +1,7 @@ +import { Uint8ArrayList } from 'uint8arraylist'; +import type { IHandshake } from '../@types/handshake-interface.js'; +import type { MetricsRegistry } from '../metrics.js'; +import type { Transform } from 'it-stream-types'; +export declare function encryptStream(handshake: IHandshake, metrics?: MetricsRegistry): Transform>; +export declare function decryptStream(handshake: IHandshake, metrics?: MetricsRegistry): Transform, AsyncGenerator>; +//# sourceMappingURL=streaming.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/streaming.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/streaming.d.ts.map new file mode 100644 index 000000000..b2ebdfedb --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/streaming.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../../../src/crypto/streaming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAI/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAKhD,wBAAgB,aAAa,CAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC,cAAc,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC,CAuBvI;AAGD,wBAAgB,aAAa,CAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC,CAyBvK"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/streaming.js b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/streaming.js new file mode 100644 index 000000000..29e1b0252 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/streaming.js @@ -0,0 +1,53 @@ +import { Uint8ArrayList } from 'uint8arraylist'; +import { allocUnsafe as uint8ArrayAllocUnsafe } from 'uint8arrays/alloc'; +import { NOISE_MSG_MAX_LENGTH_BYTES, NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG } from '../constants.js'; +import { uint16BEEncode } from '../encoder.js'; +const CHACHA_TAG_LENGTH = 16; +// Returns generator that encrypts payload from the user +export function encryptStream(handshake, metrics) { + return async function* (source) { + for await (const chunk of source) { + for (let i = 0; i < chunk.length; i += NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG) { + let end = i + NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG; + if (end > chunk.length) { + end = chunk.length; + } + let data; + if (chunk instanceof Uint8Array) { + data = handshake.encrypt(chunk.subarray(i, end), handshake.session); + } + else { + data = handshake.encrypt(chunk.sublist(i, end), handshake.session); + } + metrics?.encryptedPackets.increment(); + yield new Uint8ArrayList(uint16BEEncode(data.byteLength), data); + } + } + }; +} +// Decrypt received payload to the user +export function decryptStream(handshake, metrics) { + return async function* (source) { + for await (const chunk of source) { + for (let i = 0; i < chunk.length; i += NOISE_MSG_MAX_LENGTH_BYTES) { + let end = i + NOISE_MSG_MAX_LENGTH_BYTES; + if (end > chunk.length) { + end = chunk.length; + } + if (end - CHACHA_TAG_LENGTH < i) { + throw new Error('Invalid chunk'); + } + const encrypted = chunk.sublist(i, end); + const dst = uint8ArrayAllocUnsafe(end - CHACHA_TAG_LENGTH - i); + const { plaintext: decrypted, valid } = handshake.decrypt(encrypted, handshake.session, dst); + if (!valid) { + metrics?.decryptErrors.increment(); + throw new Error('Failed to validate decrypted chunk'); + } + metrics?.decryptedPackets.increment(); + yield decrypted; + } + } + }; +} +//# sourceMappingURL=streaming.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/streaming.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/streaming.js.map new file mode 100644 index 000000000..3a74df189 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/crypto/streaming.js.map @@ -0,0 +1 @@ +{"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../../src/crypto/streaming.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/encoder.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/encoder.d.ts new file mode 100644 index 000000000..a24ce9256 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/encoder.d.ts @@ -0,0 +1,16 @@ +import { Uint8ArrayList } from 'uint8arraylist'; +import type { bytes } from './@types/basic.js'; +import type { MessageBuffer } from './@types/handshake.js'; +import type { LengthDecoderFunction } from 'it-length-prefixed'; +export declare const uint16BEEncode: { + (value: number): Uint8Array; + bytes: number; +}; +export declare const uint16BEDecode: LengthDecoderFunction; +export declare function encode0(message: MessageBuffer): Uint8ArrayList; +export declare function encode1(message: MessageBuffer): Uint8ArrayList; +export declare function encode2(message: MessageBuffer): Uint8ArrayList; +export declare function decode0(input: bytes): MessageBuffer; +export declare function decode1(input: bytes): MessageBuffer; +export declare function decode2(input: bytes): MessageBuffer; +//# sourceMappingURL=encoder.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/encoder.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/encoder.d.ts.map new file mode 100644 index 000000000..76e8c0a65 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/encoder.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../src/encoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAE/D,eAAO,MAAM,cAAc;YAAW,MAAM,GAAG,UAAU;;CAIxD,CAAA;AAGD,eAAO,MAAM,cAAc,EAAE,qBAQ5B,CAAA;AAKD,wBAAgB,OAAO,CAAE,OAAO,EAAE,aAAa,GAAG,cAAc,CAE/D;AAED,wBAAgB,OAAO,CAAE,OAAO,EAAE,aAAa,GAAG,cAAc,CAE/D;AAED,wBAAgB,OAAO,CAAE,OAAO,EAAE,aAAa,GAAG,cAAc,CAE/D;AAED,wBAAgB,OAAO,CAAE,KAAK,EAAE,KAAK,GAAG,aAAa,CAUpD;AAED,wBAAgB,OAAO,CAAE,KAAK,EAAE,KAAK,GAAG,aAAa,CAUpD;AAED,wBAAgB,OAAO,CAAE,KAAK,EAAE,KAAK,GAAG,aAAa,CAUpD"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/encoder.js b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/encoder.js new file mode 100644 index 000000000..fb9145e54 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/encoder.js @@ -0,0 +1,58 @@ +import { Uint8ArrayList } from 'uint8arraylist'; +import { alloc as uint8ArrayAlloc, allocUnsafe as uint8ArrayAllocUnsafe } from 'uint8arrays/alloc'; +export const uint16BEEncode = (value) => { + const target = uint8ArrayAllocUnsafe(2); + new DataView(target.buffer, target.byteOffset, target.byteLength).setUint16(0, value, false); + return target; +}; +uint16BEEncode.bytes = 2; +export const uint16BEDecode = (data) => { + if (data.length < 2) + throw RangeError('Could not decode int16BE'); + if (data instanceof Uint8Array) { + return new DataView(data.buffer, data.byteOffset, data.byteLength).getUint16(0, false); + } + return data.getUint16(0); +}; +uint16BEDecode.bytes = 2; +// Note: IK and XX encoder usage is opposite (XX uses in stages encode0 where IK uses encode1) +export function encode0(message) { + return new Uint8ArrayList(message.ne, message.ciphertext); +} +export function encode1(message) { + return new Uint8ArrayList(message.ne, message.ns, message.ciphertext); +} +export function encode2(message) { + return new Uint8ArrayList(message.ns, message.ciphertext); +} +export function decode0(input) { + if (input.length < 32) { + throw new Error('Cannot decode stage 0 MessageBuffer: length less than 32 bytes.'); + } + return { + ne: input.subarray(0, 32), + ciphertext: input.subarray(32, input.length), + ns: uint8ArrayAlloc(0) + }; +} +export function decode1(input) { + if (input.length < 80) { + throw new Error('Cannot decode stage 1 MessageBuffer: length less than 80 bytes.'); + } + return { + ne: input.subarray(0, 32), + ns: input.subarray(32, 80), + ciphertext: input.subarray(80, input.length) + }; +} +export function decode2(input) { + if (input.length < 48) { + throw new Error('Cannot decode stage 2 MessageBuffer: length less than 48 bytes.'); + } + return { + ne: uint8ArrayAlloc(0), + ns: input.subarray(0, 48), + ciphertext: input.subarray(48, input.length) + }; +} +//# sourceMappingURL=encoder.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/encoder.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/encoder.js.map new file mode 100644 index 000000000..72d45cb41 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/encoder.js.map @@ -0,0 +1 @@ +{"version":3,"file":"encoder.js","sourceRoot":"","sources":["../../src/encoder.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/errors.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/errors.d.ts new file mode 100644 index 000000000..92c9077d0 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/errors.d.ts @@ -0,0 +1,11 @@ +export declare class UnexpectedPeerError extends Error { + code: string; + constructor(message?: string); + static readonly code = "ERR_UNEXPECTED_PEER"; +} +export declare class InvalidCryptoExchangeError extends Error { + code: string; + constructor(message?: string); + static readonly code = "ERR_INVALID_CRYPTO_EXCHANGE"; +} +//# sourceMappingURL=errors.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/errors.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/errors.d.ts.map new file mode 100644 index 000000000..6be6d3ab6 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/errors.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,mBAAoB,SAAQ,KAAK;IACrC,IAAI,EAAE,MAAM,CAAA;gBAEN,OAAO,SAAoB;IAKxC,MAAM,CAAC,QAAQ,CAAC,IAAI,yBAAwB;CAC7C;AAED,qBAAa,0BAA2B,SAAQ,KAAK;IAC5C,IAAI,EAAE,MAAM,CAAA;gBAEN,OAAO,SAA4B;IAKhD,MAAM,CAAC,QAAQ,CAAC,IAAI,iCAAgC;CACrD"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/errors.js b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/errors.js new file mode 100644 index 000000000..8c149c67f --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/errors.js @@ -0,0 +1,17 @@ +export class UnexpectedPeerError extends Error { + code; + constructor(message = 'Unexpected Peer') { + super(message); + this.code = UnexpectedPeerError.code; + } + static code = 'ERR_UNEXPECTED_PEER'; +} +export class InvalidCryptoExchangeError extends Error { + code; + constructor(message = 'Invalid crypto exchange') { + super(message); + this.code = InvalidCryptoExchangeError.code; + } + static code = 'ERR_INVALID_CRYPTO_EXCHANGE'; +} +//# sourceMappingURL=errors.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/errors.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/errors.js.map new file mode 100644 index 000000000..b14037001 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/errors.js.map @@ -0,0 +1 @@ +{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACrC,IAAI,CAAQ;IAEnB,YAAa,OAAO,GAAG,iBAAiB;QACtC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAA;IACtC,CAAC;IAED,MAAM,CAAU,IAAI,GAAG,qBAAqB,CAAA;;AAG9C,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAC5C,IAAI,CAAQ;IAEnB,YAAa,OAAO,GAAG,yBAAyB;QAC9C,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC,IAAI,CAAA;IAC7C,CAAC;IAED,MAAM,CAAU,IAAI,GAAG,6BAA6B,CAAA"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshake-xx.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshake-xx.d.ts new file mode 100644 index 000000000..da91dcde7 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshake-xx.d.ts @@ -0,0 +1,36 @@ +import { XX } from './handshakes/xx.js'; +import type { bytes, bytes32 } from './@types/basic.js'; +import type { IHandshake } from './@types/handshake-interface.js'; +import type { NoiseSession } from './@types/handshake.js'; +import type { KeyPair } from './@types/libp2p.js'; +import type { ICryptoInterface } from './crypto.js'; +import type { NoiseComponents } from './index.js'; +import type { NoiseExtensions } from './proto/payload.js'; +import type { PeerId } from '@libp2p/interface'; +import type { LengthPrefixedStream } from 'it-length-prefixed-stream'; +import type { Uint8ArrayList } from 'uint8arraylist'; +export declare class XXHandshake implements IHandshake { + isInitiator: boolean; + session: NoiseSession; + remotePeer: PeerId; + remoteExtensions: NoiseExtensions; + protected payload: bytes; + protected connection: LengthPrefixedStream; + protected xx: XX; + protected staticKeypair: KeyPair; + private readonly prologue; + private readonly log; + constructor(components: NoiseComponents, isInitiator: boolean, payload: bytes, prologue: bytes32, crypto: ICryptoInterface, staticKeypair: KeyPair, connection: LengthPrefixedStream, remotePeer?: PeerId, handshake?: XX); + propose(): Promise; + exchange(): Promise; + finish(): Promise; + encrypt(plaintext: Uint8Array | Uint8ArrayList, session: NoiseSession): Uint8Array | Uint8ArrayList; + decrypt(ciphertext: Uint8Array | Uint8ArrayList, session: NoiseSession, dst?: Uint8Array): { + plaintext: Uint8Array | Uint8ArrayList; + valid: boolean; + }; + getRemoteStaticKey(): Uint8Array | Uint8ArrayList; + private getCS; + protected setRemoteNoiseExtension(e: NoiseExtensions | null | undefined): void; +} +//# sourceMappingURL=handshake-xx.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshake-xx.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshake-xx.d.ts.map new file mode 100644 index 000000000..44b394b43 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshake-xx.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"handshake-xx.d.ts","sourceRoot":"","sources":["../../src/handshake-xx.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAA;AAavC,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAU,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,qBAAa,WAAY,YAAW,UAAU;IACrC,WAAW,EAAE,OAAO,CAAA;IACpB,OAAO,EAAE,YAAY,CAAA;IACrB,UAAU,EAAG,MAAM,CAAA;IACnB,gBAAgB,EAAE,eAAe,CAAiC;IAEzE,SAAS,CAAC,OAAO,EAAE,KAAK,CAAA;IACxB,SAAS,CAAC,UAAU,EAAE,oBAAoB,CAAA;IAC1C,SAAS,CAAC,EAAE,EAAE,EAAE,CAAA;IAChB,SAAS,CAAC,aAAa,EAAE,OAAO,CAAA;IAEhC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;gBAG1B,UAAU,EAAE,eAAe,EAC3B,WAAW,EAAE,OAAO,EACpB,OAAO,EAAE,KAAK,EACd,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,gBAAgB,EACxB,aAAa,EAAE,OAAO,EACtB,UAAU,EAAE,oBAAoB,EAChC,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,EAAE;IAgBH,OAAO,IAAK,OAAO,CAAC,IAAI,CAAC;IAqBzB,QAAQ,IAAK,OAAO,CAAC,IAAI,CAAC;IAiC1B,MAAM,IAAK,OAAO,CAAC,IAAI,CAAC;IA4B9B,OAAO,CAAE,SAAS,EAAE,UAAU,GAAG,cAAc,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU,GAAG,cAAc;IAMpG,OAAO,CAAE,UAAU,EAAE,UAAU,GAAG,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG;QAAE,SAAS,EAAE,UAAU,GAAG,cAAc,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE;IAMtJ,kBAAkB,IAAK,UAAU,GAAG,cAAc;IAIzD,OAAO,CAAC,KAAK;IAYb,SAAS,CAAC,uBAAuB,CAAE,CAAC,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI;CAKhF"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshake-xx.js b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshake-xx.js new file mode 100644 index 000000000..eb7918e5d --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshake-xx.js @@ -0,0 +1,142 @@ +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc'; +import { decode0, decode1, decode2, encode0, encode1, encode2 } from './encoder.js'; +import { InvalidCryptoExchangeError, UnexpectedPeerError } from './errors.js'; +import { XX } from './handshakes/xx.js'; +import { logLocalStaticKeys, logLocalEphemeralKeys, logRemoteEphemeralKey, logRemoteStaticKey, logCipherState } from './logger.js'; +import { decodePayload, getPeerIdFromPayload, verifySignedPayload } from './utils.js'; +export class XXHandshake { + isInitiator; + session; + remotePeer; + remoteExtensions = { webtransportCerthashes: [] }; + payload; + connection; + xx; + staticKeypair; + prologue; + log; + constructor(components, isInitiator, payload, prologue, crypto, staticKeypair, connection, remotePeer, handshake) { + this.log = components.logger.forComponent('libp2p:noise:xxhandshake'); + this.isInitiator = isInitiator; + this.payload = payload; + this.prologue = prologue; + this.staticKeypair = staticKeypair; + this.connection = connection; + if (remotePeer) { + this.remotePeer = remotePeer; + } + this.xx = handshake ?? new XX(components, crypto); + this.session = this.xx.initSession(this.isInitiator, this.prologue, this.staticKeypair); + } + // stage 0 + async propose() { + logLocalStaticKeys(this.session.hs.s, this.log); + if (this.isInitiator) { + this.log.trace('Stage 0 - Initiator starting to send first message.'); + const messageBuffer = this.xx.sendMessage(this.session, uint8ArrayAlloc(0)); + await this.connection.write(encode0(messageBuffer)); + this.log.trace('Stage 0 - Initiator finished sending first message.'); + logLocalEphemeralKeys(this.session.hs.e, this.log); + } + else { + this.log.trace('Stage 0 - Responder waiting to receive first message...'); + const receivedMessageBuffer = decode0((await this.connection.read()).subarray()); + const { valid } = this.xx.recvMessage(this.session, receivedMessageBuffer); + if (!valid) { + throw new InvalidCryptoExchangeError('xx handshake stage 0 validation fail'); + } + this.log.trace('Stage 0 - Responder received first message.'); + logRemoteEphemeralKey(this.session.hs.re, this.log); + } + } + // stage 1 + async exchange() { + if (this.isInitiator) { + this.log.trace('Stage 1 - Initiator waiting to receive first message from responder...'); + const receivedMessageBuffer = decode1((await this.connection.read()).subarray()); + const { plaintext, valid } = this.xx.recvMessage(this.session, receivedMessageBuffer); + if (!valid) { + throw new InvalidCryptoExchangeError('xx handshake stage 1 validation fail'); + } + this.log.trace('Stage 1 - Initiator received the message.'); + logRemoteEphemeralKey(this.session.hs.re, this.log); + logRemoteStaticKey(this.session.hs.rs, this.log); + this.log.trace("Initiator going to check remote's signature..."); + try { + const decodedPayload = decodePayload(plaintext); + this.remotePeer = this.remotePeer || await getPeerIdFromPayload(decodedPayload); + await verifySignedPayload(this.session.hs.rs, decodedPayload, this.remotePeer); + this.setRemoteNoiseExtension(decodedPayload.extensions); + } + catch (e) { + const err = e; + throw new UnexpectedPeerError(`Error occurred while verifying signed payload: ${err.message}`); + } + this.log.trace('All good with the signature!'); + } + else { + this.log.trace('Stage 1 - Responder sending out first message with signed payload and static key.'); + const messageBuffer = this.xx.sendMessage(this.session, this.payload); + await this.connection.write(encode1(messageBuffer)); + this.log.trace('Stage 1 - Responder sent the second handshake message with signed payload.'); + logLocalEphemeralKeys(this.session.hs.e, this.log); + } + } + // stage 2 + async finish() { + if (this.isInitiator) { + this.log.trace('Stage 2 - Initiator sending third handshake message.'); + const messageBuffer = this.xx.sendMessage(this.session, this.payload); + await this.connection.write(encode2(messageBuffer)); + this.log.trace('Stage 2 - Initiator sent message with signed payload.'); + } + else { + this.log.trace('Stage 2 - Responder waiting for third handshake message...'); + const receivedMessageBuffer = decode2((await this.connection.read()).subarray()); + const { plaintext, valid } = this.xx.recvMessage(this.session, receivedMessageBuffer); + if (!valid) { + throw new InvalidCryptoExchangeError('xx handshake stage 2 validation fail'); + } + this.log.trace('Stage 2 - Responder received the message, finished handshake.'); + try { + const decodedPayload = decodePayload(plaintext); + this.remotePeer = this.remotePeer || await getPeerIdFromPayload(decodedPayload); + await verifySignedPayload(this.session.hs.rs, decodedPayload, this.remotePeer); + this.setRemoteNoiseExtension(decodedPayload.extensions); + } + catch (e) { + const err = e; + throw new UnexpectedPeerError(`Error occurred while verifying signed payload: ${err.message}`); + } + } + logCipherState(this.session, this.log); + } + encrypt(plaintext, session) { + const cs = this.getCS(session); + return this.xx.encryptWithAd(cs, uint8ArrayAlloc(0), plaintext); + } + decrypt(ciphertext, session, dst) { + const cs = this.getCS(session, false); + return this.xx.decryptWithAd(cs, uint8ArrayAlloc(0), ciphertext, dst); + } + getRemoteStaticKey() { + return this.session.hs.rs; + } + getCS(session, encryption = true) { + if (!session.cs1 || !session.cs2) { + throw new InvalidCryptoExchangeError('Handshake not completed properly, cipher state does not exist.'); + } + if (this.isInitiator) { + return encryption ? session.cs1 : session.cs2; + } + else { + return encryption ? session.cs2 : session.cs1; + } + } + setRemoteNoiseExtension(e) { + if (e) { + this.remoteExtensions = e; + } + } +} +//# sourceMappingURL=handshake-xx.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshake-xx.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshake-xx.js.map new file mode 100644 index 000000000..ff939d7f6 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshake-xx.js.map @@ -0,0 +1 @@ +{"version":3,"file":"handshake-xx.js","sourceRoot":"","sources":["../../src/handshake-xx.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/abstract-handshake.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/abstract-handshake.d.ts new file mode 100644 index 000000000..ab58a1184 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/abstract-handshake.d.ts @@ -0,0 +1,39 @@ +import { Uint8ArrayList } from 'uint8arraylist'; +import { Nonce } from '../nonce.js'; +import type { bytes, bytes32 } from '../@types/basic.js'; +import type { CipherState, MessageBuffer, SymmetricState } from '../@types/handshake.js'; +import type { ICryptoInterface } from '../crypto.js'; +import type { NoiseComponents } from '../index.js'; +export interface DecryptedResult { + plaintext: Uint8ArrayList | Uint8Array; + valid: boolean; +} +export interface SplitState { + cs1: CipherState; + cs2: CipherState; +} +export declare abstract class AbstractHandshake { + crypto: ICryptoInterface; + private readonly log; + constructor(components: NoiseComponents, crypto: ICryptoInterface); + encryptWithAd(cs: CipherState, ad: Uint8Array, plaintext: Uint8Array | Uint8ArrayList): Uint8Array | Uint8ArrayList; + decryptWithAd(cs: CipherState, ad: Uint8Array, ciphertext: Uint8Array | Uint8ArrayList, dst?: Uint8Array): DecryptedResult; + protected hasKey(cs: CipherState): boolean; + protected createEmptyKey(): bytes32; + protected isEmptyKey(k: bytes32): boolean; + protected encrypt(k: bytes32, n: Nonce, ad: Uint8Array, plaintext: Uint8Array | Uint8ArrayList): Uint8Array | Uint8ArrayList; + protected encryptAndHash(ss: SymmetricState, plaintext: bytes): Uint8Array | Uint8ArrayList; + protected decrypt(k: bytes32, n: Nonce, ad: bytes, ciphertext: Uint8Array | Uint8ArrayList, dst?: Uint8Array): DecryptedResult; + protected decryptAndHash(ss: SymmetricState, ciphertext: Uint8Array | Uint8ArrayList): DecryptedResult; + protected dh(privateKey: bytes32, publicKey: Uint8Array | Uint8ArrayList): bytes32; + protected mixHash(ss: SymmetricState, data: Uint8Array | Uint8ArrayList): void; + protected getHash(a: Uint8Array, b: Uint8Array | Uint8ArrayList): Uint8Array; + protected mixKey(ss: SymmetricState, ikm: bytes32): void; + protected initializeKey(k: bytes32): CipherState; + protected initializeSymmetric(protocolName: string): SymmetricState; + protected hashProtocolName(protocolName: Uint8Array): bytes32; + protected split(ss: SymmetricState): SplitState; + protected writeMessageRegular(cs: CipherState, payload: bytes): MessageBuffer; + protected readMessageRegular(cs: CipherState, message: MessageBuffer): DecryptedResult; +} +//# sourceMappingURL=abstract-handshake.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/abstract-handshake.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/abstract-handshake.d.ts.map new file mode 100644 index 000000000..9fd52efd7 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/abstract-handshake.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"abstract-handshake.d.ts","sourceRoot":"","sources":["../../../src/handshakes/abstract-handshake.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/abstract-handshake.js b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/abstract-handshake.js new file mode 100644 index 000000000..19b6d0d6b --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/abstract-handshake.js @@ -0,0 +1,142 @@ +import { Uint8ArrayList } from 'uint8arraylist'; +import { fromString as uint8ArrayFromString } from 'uint8arrays'; +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc'; +import { equals as uint8ArrayEquals } from 'uint8arrays/equals'; +import { Nonce } from '../nonce.js'; +export class AbstractHandshake { + crypto; + log; + constructor(components, crypto) { + this.log = components.logger.forComponent('libp2p:noise:abstract-handshake'); + this.crypto = crypto; + } + encryptWithAd(cs, ad, plaintext) { + const e = this.encrypt(cs.k, cs.n, ad, plaintext); + cs.n.increment(); + return e; + } + decryptWithAd(cs, ad, ciphertext, dst) { + const { plaintext, valid } = this.decrypt(cs.k, cs.n, ad, ciphertext, dst); + if (valid) + cs.n.increment(); + return { plaintext, valid }; + } + // Cipher state related + hasKey(cs) { + return !this.isEmptyKey(cs.k); + } + createEmptyKey() { + return uint8ArrayAlloc(32); + } + isEmptyKey(k) { + const emptyKey = this.createEmptyKey(); + return uint8ArrayEquals(emptyKey, k); + } + encrypt(k, n, ad, plaintext) { + n.assertValue(); + return this.crypto.chaCha20Poly1305Encrypt(plaintext, n.getBytes(), ad, k); + } + encryptAndHash(ss, plaintext) { + let ciphertext; + if (this.hasKey(ss.cs)) { + ciphertext = this.encryptWithAd(ss.cs, ss.h, plaintext); + } + else { + ciphertext = plaintext; + } + this.mixHash(ss, ciphertext); + return ciphertext; + } + decrypt(k, n, ad, ciphertext, dst) { + n.assertValue(); + const encryptedMessage = this.crypto.chaCha20Poly1305Decrypt(ciphertext, n.getBytes(), ad, k, dst); + if (encryptedMessage) { + return { + plaintext: encryptedMessage, + valid: true + }; + } + else { + return { + plaintext: uint8ArrayAlloc(0), + valid: false + }; + } + } + decryptAndHash(ss, ciphertext) { + let plaintext; + let valid = true; + if (this.hasKey(ss.cs)) { + ({ plaintext, valid } = this.decryptWithAd(ss.cs, ss.h, ciphertext)); + } + else { + plaintext = ciphertext; + } + this.mixHash(ss, ciphertext); + return { plaintext, valid }; + } + dh(privateKey, publicKey) { + try { + const derivedU8 = this.crypto.generateX25519SharedKey(privateKey, publicKey); + if (derivedU8.length === 32) { + return derivedU8; + } + return derivedU8.subarray(0, 32); + } + catch (e) { + const err = e; + this.log.error('error deriving shared key', err); + return uint8ArrayAlloc(32); + } + } + mixHash(ss, data) { + ss.h = this.getHash(ss.h, data); + } + getHash(a, b) { + const u = this.crypto.hashSHA256(new Uint8ArrayList(a, b)); + return u; + } + mixKey(ss, ikm) { + const [ck, tempK] = this.crypto.getHKDF(ss.ck, ikm); + ss.cs = this.initializeKey(tempK); + ss.ck = ck; + } + initializeKey(k) { + return { k, n: new Nonce() }; + } + // Symmetric state related + initializeSymmetric(protocolName) { + const protocolNameBytes = uint8ArrayFromString(protocolName, 'utf-8'); + const h = this.hashProtocolName(protocolNameBytes); + const ck = h; + const key = this.createEmptyKey(); + const cs = this.initializeKey(key); + return { cs, ck, h }; + } + hashProtocolName(protocolName) { + if (protocolName.length <= 32) { + const h = uint8ArrayAlloc(32); + h.set(protocolName); + return h; + } + else { + return this.getHash(protocolName, uint8ArrayAlloc(0)); + } + } + split(ss) { + const [tempk1, tempk2] = this.crypto.getHKDF(ss.ck, uint8ArrayAlloc(0)); + const cs1 = this.initializeKey(tempk1); + const cs2 = this.initializeKey(tempk2); + return { cs1, cs2 }; + } + writeMessageRegular(cs, payload) { + const ciphertext = this.encryptWithAd(cs, uint8ArrayAlloc(0), payload); + const ne = this.createEmptyKey(); + const ns = uint8ArrayAlloc(0); + return { ne, ns, ciphertext }; + } + readMessageRegular(cs, message) { + return this.decryptWithAd(cs, uint8ArrayAlloc(0), message.ciphertext); + } +} +//# sourceMappingURL=abstract-handshake.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/abstract-handshake.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/abstract-handshake.js.map new file mode 100644 index 000000000..36897bbc8 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/abstract-handshake.js.map @@ -0,0 +1 @@ +{"version":3,"file":"abstract-handshake.js","sourceRoot":"","sources":["../../../src/handshakes/abstract-handshake.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/xx.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/xx.d.ts new file mode 100644 index 000000000..bf79dc414 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/xx.d.ts @@ -0,0 +1,18 @@ +import { AbstractHandshake, type DecryptedResult } from './abstract-handshake.js'; +import type { bytes32, bytes } from '../@types/basic.js'; +import type { MessageBuffer, NoiseSession } from '../@types/handshake.js'; +import type { KeyPair } from '../@types/libp2p.js'; +export declare class XX extends AbstractHandshake { + private initializeInitiator; + private initializeResponder; + private writeMessageA; + private writeMessageB; + private writeMessageC; + private readMessageA; + private readMessageB; + private readMessageC; + initSession(initiator: boolean, prologue: bytes32, s: KeyPair): NoiseSession; + sendMessage(session: NoiseSession, message: bytes, ephemeral?: KeyPair): MessageBuffer; + recvMessage(session: NoiseSession, message: MessageBuffer): DecryptedResult; +} +//# sourceMappingURL=xx.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/xx.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/xx.d.ts.map new file mode 100644 index 000000000..7a6ec499c --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/xx.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"xx.d.ts","sourceRoot":"","sources":["../../../src/handshakes/xx.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACjF,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAA+B,aAAa,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACtG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAGlD,qBAAa,EAAG,SAAQ,iBAAiB;IACvC,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,YAAY;IAgBb,WAAW,CAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,YAAY;IAkB7E,WAAW,CAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,aAAa;IAkCvF,WAAW,CAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,eAAe;CAkBpF"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/xx.js b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/xx.js new file mode 100644 index 000000000..dbfa58f06 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/xx.js @@ -0,0 +1,162 @@ +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc'; +import { isValidPublicKey } from '../utils.js'; +import { AbstractHandshake } from './abstract-handshake.js'; +export class XX extends AbstractHandshake { + initializeInitiator(prologue, s, rs, psk) { + const name = 'Noise_XX_25519_ChaChaPoly_SHA256'; + const ss = this.initializeSymmetric(name); + this.mixHash(ss, prologue); + const re = uint8ArrayAlloc(32); + return { ss, s, rs, psk, re }; + } + initializeResponder(prologue, s, rs, psk) { + const name = 'Noise_XX_25519_ChaChaPoly_SHA256'; + const ss = this.initializeSymmetric(name); + this.mixHash(ss, prologue); + const re = uint8ArrayAlloc(32); + return { ss, s, rs, psk, re }; + } + writeMessageA(hs, payload, e) { + const ns = uint8ArrayAlloc(0); + if (e !== undefined) { + hs.e = e; + } + else { + hs.e = this.crypto.generateX25519KeyPair(); + } + const ne = hs.e.publicKey; + this.mixHash(hs.ss, ne); + const ciphertext = this.encryptAndHash(hs.ss, payload); + return { ne, ns, ciphertext }; + } + writeMessageB(hs, payload) { + hs.e = this.crypto.generateX25519KeyPair(); + const ne = hs.e.publicKey; + this.mixHash(hs.ss, ne); + this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.re)); + const spk = hs.s.publicKey; + const ns = this.encryptAndHash(hs.ss, spk); + this.mixKey(hs.ss, this.dh(hs.s.privateKey, hs.re)); + const ciphertext = this.encryptAndHash(hs.ss, payload); + return { ne, ns, ciphertext }; + } + writeMessageC(hs, payload) { + const spk = hs.s.publicKey; + const ns = this.encryptAndHash(hs.ss, spk); + this.mixKey(hs.ss, this.dh(hs.s.privateKey, hs.re)); + const ciphertext = this.encryptAndHash(hs.ss, payload); + const ne = this.createEmptyKey(); + const messageBuffer = { ne, ns, ciphertext }; + const { cs1, cs2 } = this.split(hs.ss); + return { h: hs.ss.h, messageBuffer, cs1, cs2 }; + } + readMessageA(hs, message) { + if (isValidPublicKey(message.ne)) { + hs.re = message.ne; + } + this.mixHash(hs.ss, hs.re); + return this.decryptAndHash(hs.ss, message.ciphertext); + } + readMessageB(hs, message) { + if (isValidPublicKey(message.ne)) { + hs.re = message.ne; + } + this.mixHash(hs.ss, hs.re); + if (!hs.e) { + throw new Error('Handshake state `e` param is missing.'); + } + this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.re)); + const { plaintext: ns, valid: valid1 } = this.decryptAndHash(hs.ss, message.ns); + if (valid1 && isValidPublicKey(ns)) { + hs.rs = ns; + } + this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.rs)); + const { plaintext, valid: valid2 } = this.decryptAndHash(hs.ss, message.ciphertext); + return { plaintext, valid: (valid1 && valid2) }; + } + readMessageC(hs, message) { + const { plaintext: ns, valid: valid1 } = this.decryptAndHash(hs.ss, message.ns); + if (valid1 && isValidPublicKey(ns)) { + hs.rs = ns; + } + if (!hs.e) { + throw new Error('Handshake state `e` param is missing.'); + } + this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.rs)); + const { plaintext, valid: valid2 } = this.decryptAndHash(hs.ss, message.ciphertext); + const { cs1, cs2 } = this.split(hs.ss); + return { h: hs.ss.h, plaintext, valid: (valid1 && valid2), cs1, cs2 }; + } + initSession(initiator, prologue, s) { + const psk = this.createEmptyKey(); + const rs = uint8ArrayAlloc(32); // no static key yet + let hs; + if (initiator) { + hs = this.initializeInitiator(prologue, s, rs, psk); + } + else { + hs = this.initializeResponder(prologue, s, rs, psk); + } + return { + hs, + i: initiator, + mc: 0 + }; + } + sendMessage(session, message, ephemeral) { + let messageBuffer; + if (session.mc === 0) { + messageBuffer = this.writeMessageA(session.hs, message, ephemeral); + } + else if (session.mc === 1) { + messageBuffer = this.writeMessageB(session.hs, message); + } + else if (session.mc === 2) { + const { h, messageBuffer: resultingBuffer, cs1, cs2 } = this.writeMessageC(session.hs, message); + messageBuffer = resultingBuffer; + session.h = h; + session.cs1 = cs1; + session.cs2 = cs2; + } + else if (session.mc > 2) { + if (session.i) { + if (!session.cs1) { + throw new Error('CS1 (cipher state) is not defined'); + } + messageBuffer = this.writeMessageRegular(session.cs1, message); + } + else { + if (!session.cs2) { + throw new Error('CS2 (cipher state) is not defined'); + } + messageBuffer = this.writeMessageRegular(session.cs2, message); + } + } + else { + throw new Error('Session invalid.'); + } + session.mc++; + return messageBuffer; + } + recvMessage(session, message) { + let plaintext = uint8ArrayAlloc(0); + let valid = false; + if (session.mc === 0) { + ({ plaintext, valid } = this.readMessageA(session.hs, message)); + } + else if (session.mc === 1) { + ({ plaintext, valid } = this.readMessageB(session.hs, message)); + } + else if (session.mc === 2) { + const { h, plaintext: resultingPlaintext, valid: resultingValid, cs1, cs2 } = this.readMessageC(session.hs, message); + plaintext = resultingPlaintext; + valid = resultingValid; + session.h = h; + session.cs1 = cs1; + session.cs2 = cs2; + } + session.mc++; + return { plaintext, valid }; + } +} +//# sourceMappingURL=xx.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/xx.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/xx.js.map new file mode 100644 index 000000000..428a5b166 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/handshakes/xx.js.map @@ -0,0 +1 @@ +{"version":3,"file":"xx.js","sourceRoot":"","sources":["../../../src/handshakes/xx.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/index.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/index.d.ts new file mode 100644 index 000000000..69b2f897c --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/index.d.ts @@ -0,0 +1,11 @@ +import type { NoiseInit } from './noise.js'; +import type { NoiseExtensions } from './proto/payload.js'; +import type { ComponentLogger, ConnectionEncrypter, Metrics } from '@libp2p/interface'; +export type { ICryptoInterface } from './crypto.js'; +export { pureJsCrypto } from './crypto/js.js'; +export interface NoiseComponents { + logger: ComponentLogger; + metrics?: Metrics; +} +export declare function noise(init?: NoiseInit): (components: NoiseComponents) => ConnectionEncrypter; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/index.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/index.d.ts.map new file mode 100644 index 000000000..7f7eb0379 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACtF,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,wBAAgB,KAAK,CAAE,IAAI,GAAE,SAAc,GAAG,CAAC,UAAU,EAAE,eAAe,KAAK,mBAAmB,CAAC,eAAe,CAAC,CAElH"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/index.js b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/index.js new file mode 100644 index 000000000..f0b2095c8 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/index.js @@ -0,0 +1,6 @@ +import { Noise } from './noise.js'; +export { pureJsCrypto } from './crypto/js.js'; +export function noise(init = {}) { + return (components) => new Noise(components, init); +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/index.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/index.js.map new file mode 100644 index 000000000..f068b39ba --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAKlC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAO7C,MAAM,UAAU,KAAK,CAAE,OAAkB,EAAE;IACzC,OAAO,CAAC,UAA2B,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AACrE,CAAC"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/logger.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/logger.d.ts new file mode 100644 index 000000000..a6ae00929 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/logger.d.ts @@ -0,0 +1,10 @@ +import type { NoiseSession } from './@types/handshake.js'; +import type { KeyPair } from './@types/libp2p.js'; +import type { Logger } from '@libp2p/interface'; +import type { Uint8ArrayList } from 'uint8arraylist'; +export declare function logLocalStaticKeys(s: KeyPair, keyLogger: Logger): void; +export declare function logLocalEphemeralKeys(e: KeyPair | undefined, keyLogger: Logger): void; +export declare function logRemoteStaticKey(rs: Uint8Array | Uint8ArrayList, keyLogger: Logger): void; +export declare function logRemoteEphemeralKey(re: Uint8Array | Uint8ArrayList, keyLogger: Logger): void; +export declare function logCipherState(session: NoiseSession, keyLogger: Logger): void; +//# sourceMappingURL=logger.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/logger.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/logger.d.ts.map new file mode 100644 index 000000000..5292e9c8f --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/logger.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,wBAAgB,kBAAkB,CAAE,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAOvE;AAED,wBAAgB,qBAAqB,CAAE,CAAC,EAAE,OAAO,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAWtF;AAED,wBAAgB,kBAAkB,CAAE,EAAE,EAAE,UAAU,GAAG,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAM5F;AAED,wBAAgB,qBAAqB,CAAE,EAAE,EAAE,UAAU,GAAG,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAM/F;AAED,wBAAgB,cAAc,CAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAW9E"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/logger.js b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/logger.js new file mode 100644 index 000000000..6dd0beebf --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/logger.js @@ -0,0 +1,46 @@ +import { toString as uint8ArrayToString } from 'uint8arrays/to-string'; +import { DUMP_SESSION_KEYS } from './constants.js'; +export function logLocalStaticKeys(s, keyLogger) { + if (!keyLogger.enabled || !DUMP_SESSION_KEYS) { + return; + } + keyLogger(`LOCAL_STATIC_PUBLIC_KEY ${uint8ArrayToString(s.publicKey, 'hex')}`); + keyLogger(`LOCAL_STATIC_PRIVATE_KEY ${uint8ArrayToString(s.privateKey, 'hex')}`); +} +export function logLocalEphemeralKeys(e, keyLogger) { + if (!keyLogger.enabled || !DUMP_SESSION_KEYS) { + return; + } + if (e) { + keyLogger(`LOCAL_PUBLIC_EPHEMERAL_KEY ${uint8ArrayToString(e.publicKey, 'hex')}`); + keyLogger(`LOCAL_PRIVATE_EPHEMERAL_KEY ${uint8ArrayToString(e.privateKey, 'hex')}`); + } + else { + keyLogger('Missing local ephemeral keys.'); + } +} +export function logRemoteStaticKey(rs, keyLogger) { + if (!keyLogger.enabled || !DUMP_SESSION_KEYS) { + return; + } + keyLogger(`REMOTE_STATIC_PUBLIC_KEY ${uint8ArrayToString(rs.subarray(), 'hex')}`); +} +export function logRemoteEphemeralKey(re, keyLogger) { + if (!keyLogger.enabled || !DUMP_SESSION_KEYS) { + return; + } + keyLogger(`REMOTE_EPHEMERAL_PUBLIC_KEY ${uint8ArrayToString(re.subarray(), 'hex')}`); +} +export function logCipherState(session, keyLogger) { + if (!keyLogger.enabled || !DUMP_SESSION_KEYS) { + return; + } + if (session.cs1 && session.cs2) { + keyLogger(`CIPHER_STATE_1 ${session.cs1.n.getUint64()} ${uint8ArrayToString(session.cs1.k, 'hex')}`); + keyLogger(`CIPHER_STATE_2 ${session.cs2.n.getUint64()} ${uint8ArrayToString(session.cs2.k, 'hex')}`); + } + else { + keyLogger('Missing cipher state.'); + } +} +//# sourceMappingURL=logger.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/logger.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/logger.js.map new file mode 100644 index 000000000..a882d753c --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/logger.js.map @@ -0,0 +1 @@ +{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAMlD,MAAM,UAAU,kBAAkB,CAAE,CAAU,EAAE,SAAiB;IAC/D,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7C,OAAM;IACR,CAAC;IAED,SAAS,CAAC,2BAA2B,kBAAkB,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;IAC9E,SAAS,CAAC,4BAA4B,kBAAkB,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;AAClF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAE,CAAsB,EAAE,SAAiB;IAC9E,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7C,OAAM;IACR,CAAC;IAED,IAAI,CAAC,EAAE,CAAC;QACN,SAAS,CAAC,8BAA8B,kBAAkB,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;QACjF,SAAS,CAAC,+BAA+B,kBAAkB,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;IACrF,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,+BAA+B,CAAC,CAAA;IAC5C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAE,EAA+B,EAAE,SAAiB;IACpF,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7C,OAAM;IACR,CAAC;IAED,SAAS,CAAC,4BAA4B,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;AACnF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAE,EAA+B,EAAE,SAAiB;IACvF,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7C,OAAM;IACR,CAAC;IAED,SAAS,CAAC,+BAA+B,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;AACtF,CAAC;AAED,MAAM,UAAU,cAAc,CAAE,OAAqB,EAAE,SAAiB;IACtE,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7C,OAAM;IACR,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC/B,SAAS,CAAC,kBAAkB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;QACpG,SAAS,CAAC,kBAAkB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;IACtG,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,uBAAuB,CAAC,CAAA;IACpC,CAAC;AACH,CAAC"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/metrics.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/metrics.d.ts new file mode 100644 index 000000000..a049afee7 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/metrics.d.ts @@ -0,0 +1,4 @@ +import type { Counter, Metrics } from '@libp2p/interface'; +export type MetricsRegistry = Record; +export declare function registerMetrics(metrics: Metrics): MetricsRegistry; +//# sourceMappingURL=metrics.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/metrics.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/metrics.d.ts.map new file mode 100644 index 000000000..057cd6f9f --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/metrics.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAEzD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAErD,wBAAgB,eAAe,CAAE,OAAO,EAAE,OAAO,GAAG,eAAe,CA2BlE"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/metrics.js b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/metrics.js new file mode 100644 index 000000000..1b5123db8 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/metrics.js @@ -0,0 +1,20 @@ +export function registerMetrics(metrics) { + return { + xxHandshakeSuccesses: metrics.registerCounter('libp2p_noise_xxhandshake_successes_total', { + help: 'Total count of noise xxHandshakes successes_' + }), + xxHandshakeErrors: metrics.registerCounter('libp2p_noise_xxhandshake_error_total', { + help: 'Total count of noise xxHandshakes errors' + }), + encryptedPackets: metrics.registerCounter('libp2p_noise_encrypted_packets_total', { + help: 'Total count of noise encrypted packets successfully' + }), + decryptedPackets: metrics.registerCounter('libp2p_noise_decrypted_packets_total', { + help: 'Total count of noise decrypted packets' + }), + decryptErrors: metrics.registerCounter('libp2p_noise_decrypt_errors_total', { + help: 'Total count of noise decrypt errors' + }) + }; +} +//# sourceMappingURL=metrics.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/metrics.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/metrics.js.map new file mode 100644 index 000000000..9c23b331e --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/metrics.js.map @@ -0,0 +1 @@ +{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/metrics.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,eAAe,CAAE,OAAgB;IAC/C,OAAO;QACL,oBAAoB,EAAE,OAAO,CAAC,eAAe,CAC3C,0CAA0C,EAAE;YAC1C,IAAI,EAAE,8CAA8C;SACrD,CAAC;QAEJ,iBAAiB,EAAE,OAAO,CAAC,eAAe,CACxC,sCAAsC,EAAE;YACtC,IAAI,EAAE,0CAA0C;SACjD,CAAC;QAEJ,gBAAgB,EAAE,OAAO,CAAC,eAAe,CACvC,sCAAsC,EAAE;YACtC,IAAI,EAAE,qDAAqD;SAC5D,CAAC;QAEJ,gBAAgB,EAAE,OAAO,CAAC,eAAe,CACvC,sCAAsC,EAAE;YACtC,IAAI,EAAE,wCAAwC;SAC/C,CAAC;QAEJ,aAAa,EAAE,OAAO,CAAC,eAAe,CACpC,mCAAmC,EAAE;YACnC,IAAI,EAAE,qCAAqC;SAC5C,CAAC;KACL,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/noise.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/noise.d.ts new file mode 100644 index 000000000..e6d16cce3 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/noise.d.ts @@ -0,0 +1,55 @@ +import type { bytes } from './@types/basic.js'; +import type { INoiseConnection } from './@types/libp2p.js'; +import type { ICryptoInterface } from './crypto.js'; +import type { NoiseComponents } from './index.js'; +import type { NoiseExtensions } from './proto/payload.js'; +import type { MultiaddrConnection, SecuredConnection, PeerId } from '@libp2p/interface'; +import type { Duplex } from 'it-stream-types'; +import type { Uint8ArrayList } from 'uint8arraylist'; +export interface NoiseInit { + /** + * x25519 private key, reuse for faster handshakes + */ + staticNoiseKey?: bytes; + extensions?: NoiseExtensions; + crypto?: ICryptoInterface; + prologueBytes?: Uint8Array; +} +export declare class Noise implements INoiseConnection { + protocol: string; + crypto: ICryptoInterface; + private readonly prologue; + private readonly staticKeys; + private readonly extensions?; + private readonly metrics?; + private readonly components; + constructor(components: NoiseComponents, init?: NoiseInit); + /** + * Encrypt outgoing data to the remote party (handshake as initiator) + * + * @param {PeerId} localPeer - PeerId of the receiving peer + * @param {Stream} connection - streaming iterable duplex that will be encrypted + * @param {PeerId} remotePeer - PeerId of the remote peer. Used to validate the integrity of the remote peer. + * @returns {Promise>} + */ + secureOutbound> = MultiaddrConnection>(localPeer: PeerId, connection: Stream, remotePeer?: PeerId): Promise>; + /** + * Decrypt incoming data (handshake as responder). + * + * @param {PeerId} localPeer - PeerId of the receiving peer. + * @param {Stream} connection - streaming iterable duplex that will be encrypted. + * @param {PeerId} remotePeer - optional PeerId of the initiating peer, if known. This may only exist during transport upgrades. + * @returns {Promise>} + */ + secureInbound> = MultiaddrConnection>(localPeer: PeerId, connection: Stream, remotePeer?: PeerId): Promise>; + /** + * If Noise pipes supported, tries IK handshake first with XX as fallback if it fails. + * If noise pipes disabled or remote peer static key is unknown, use XX. + * + * @param {HandshakeParams} params + */ + private performHandshake; + private performXXHandshake; + private createSecureConnection; +} +//# sourceMappingURL=noise.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/noise.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/noise.d.ts.map new file mode 100644 index 000000000..0bac02bfc --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/noise.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"noise.d.ts","sourceRoot":"","sources":["../../src/noise.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,KAAK,EAAE,gBAAgB,EAAW,MAAM,oBAAoB,CAAA;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACvF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AASpD,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,cAAc,CAAC,EAAE,KAAK,CAAA;IACtB,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,MAAM,CAAC,EAAE,gBAAgB,CAAA;IACzB,aAAa,CAAC,EAAE,UAAU,CAAA;CAC3B;AAED,qBAAa,KAAM,YAAW,gBAAgB;IACrC,QAAQ,SAAW;IACnB,MAAM,EAAE,gBAAgB,CAAA;IAE/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAY;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAiB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;gBAE/B,UAAU,EAAE,eAAe,EAAE,IAAI,GAAE,SAAc;IAkB9D;;;;;;;OAOG;IACU,cAAc,CAAE,MAAM,SAAS,MAAM,CAAC,cAAc,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC,GAAG,mBAAmB,EAAG,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IA2BxO;;;;;;;OAOG;IACU,aAAa,CAAE,MAAM,SAAS,MAAM,CAAC,cAAc,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC,GAAG,mBAAmB,EAAG,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IA2BvO;;;;;OAKG;YACW,gBAAgB;YAOhB,kBAAkB;YAgClB,sBAAsB;CAmBrC"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/noise.js b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/noise.js new file mode 100644 index 000000000..f2d0ead9f --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/noise.js @@ -0,0 +1,138 @@ +import { decode } from 'it-length-prefixed'; +import { lpStream } from 'it-length-prefixed-stream'; +import { duplexPair } from 'it-pair/duplex'; +import { pipe } from 'it-pipe'; +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc'; +import { NOISE_MSG_MAX_LENGTH_BYTES } from './constants.js'; +import { defaultCrypto } from './crypto/index.js'; +import { decryptStream, encryptStream } from './crypto/streaming.js'; +import { uint16BEDecode, uint16BEEncode } from './encoder.js'; +import { XXHandshake } from './handshake-xx.js'; +import { registerMetrics } from './metrics.js'; +import { getPayload } from './utils.js'; +export class Noise { + protocol = '/noise'; + crypto; + prologue; + staticKeys; + extensions; + metrics; + components; + constructor(components, init = {}) { + const { staticNoiseKey, extensions, crypto, prologueBytes } = init; + const { metrics } = components; + this.components = components; + this.crypto = crypto ?? defaultCrypto; + this.extensions = extensions; + this.metrics = metrics ? registerMetrics(metrics) : undefined; + if (staticNoiseKey) { + // accepts x25519 private key of length 32 + this.staticKeys = this.crypto.generateX25519KeyPairFromSeed(staticNoiseKey); + } + else { + this.staticKeys = this.crypto.generateX25519KeyPair(); + } + this.prologue = prologueBytes ?? uint8ArrayAlloc(0); + } + /** + * Encrypt outgoing data to the remote party (handshake as initiator) + * + * @param {PeerId} localPeer - PeerId of the receiving peer + * @param {Stream} connection - streaming iterable duplex that will be encrypted + * @param {PeerId} remotePeer - PeerId of the remote peer. Used to validate the integrity of the remote peer. + * @returns {Promise>} + */ + async secureOutbound(localPeer, connection, remotePeer) { + const wrappedConnection = lpStream(connection, { + lengthEncoder: uint16BEEncode, + lengthDecoder: uint16BEDecode, + maxDataLength: NOISE_MSG_MAX_LENGTH_BYTES + }); + const handshake = await this.performHandshake({ + connection: wrappedConnection, + isInitiator: true, + localPeer, + remotePeer + }); + const conn = await this.createSecureConnection(wrappedConnection, handshake); + connection.source = conn.source; + connection.sink = conn.sink; + return { + conn: connection, + remoteExtensions: handshake.remoteExtensions, + remotePeer: handshake.remotePeer + }; + } + /** + * Decrypt incoming data (handshake as responder). + * + * @param {PeerId} localPeer - PeerId of the receiving peer. + * @param {Stream} connection - streaming iterable duplex that will be encrypted. + * @param {PeerId} remotePeer - optional PeerId of the initiating peer, if known. This may only exist during transport upgrades. + * @returns {Promise>} + */ + async secureInbound(localPeer, connection, remotePeer) { + const wrappedConnection = lpStream(connection, { + lengthEncoder: uint16BEEncode, + lengthDecoder: uint16BEDecode, + maxDataLength: NOISE_MSG_MAX_LENGTH_BYTES + }); + const handshake = await this.performHandshake({ + connection: wrappedConnection, + isInitiator: false, + localPeer, + remotePeer + }); + const conn = await this.createSecureConnection(wrappedConnection, handshake); + connection.source = conn.source; + connection.sink = conn.sink; + return { + conn: connection, + remotePeer: handshake.remotePeer, + remoteExtensions: handshake.remoteExtensions + }; + } + /** + * If Noise pipes supported, tries IK handshake first with XX as fallback if it fails. + * If noise pipes disabled or remote peer static key is unknown, use XX. + * + * @param {HandshakeParams} params + */ + async performHandshake(params) { + const payload = await getPayload(params.localPeer, this.staticKeys.publicKey, this.extensions); + // run XX handshake + return this.performXXHandshake(params, payload); + } + async performXXHandshake(params, payload) { + const { isInitiator, remotePeer, connection } = params; + const handshake = new XXHandshake(this.components, isInitiator, payload, this.prologue, this.crypto, this.staticKeys, connection, remotePeer); + try { + await handshake.propose(); + await handshake.exchange(); + await handshake.finish(); + this.metrics?.xxHandshakeSuccesses.increment(); + } + catch (e) { + this.metrics?.xxHandshakeErrors.increment(); + if (e instanceof Error) { + e.message = `Error occurred during XX handshake: ${e.message}`; + throw e; + } + } + return handshake; + } + async createSecureConnection(connection, handshake) { + // Create encryption box/unbox wrapper + const [secure, user] = duplexPair(); + const network = connection.unwrap(); + await pipe(secure, // write to wrapper + encryptStream(handshake, this.metrics), // encrypt data + prefix with message length + network, // send to the remote peer + (source) => decode(source, { lengthDecoder: uint16BEDecode }), // read message length prefix + decryptStream(handshake, this.metrics), // decrypt the incoming data + secure // pipe to the wrapper + ); + return user; + } +} +//# sourceMappingURL=noise.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/noise.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/noise.js.map new file mode 100644 index 000000000..18ec24d3d --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/noise.js.map @@ -0,0 +1 @@ +{"version":3,"file":"noise.js","sourceRoot":"","sources":["../../src/noise.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/nonce.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/nonce.d.ts new file mode 100644 index 000000000..662855bd3 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/nonce.d.ts @@ -0,0 +1,18 @@ +import type { bytes, uint64 } from './@types/basic.js'; +export declare const MIN_NONCE = 0; +export declare const MAX_NONCE = 4294967295; +/** + * The nonce is an uint that's increased over time. + * Maintaining different representations help improve performance. + */ +export declare class Nonce { + private n; + private readonly bytes; + private readonly view; + constructor(n?: number); + increment(): void; + getBytes(): bytes; + getUint64(): uint64; + assertValue(): void; +} +//# sourceMappingURL=nonce.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/nonce.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/nonce.d.ts.map new file mode 100644 index 000000000..6e502d077 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/nonce.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"nonce.d.ts","sourceRoot":"","sources":["../../src/nonce.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAEtD,eAAO,MAAM,SAAS,IAAI,CAAA;AAO1B,eAAO,MAAM,SAAS,aAAa,CAAA;AAInC;;;GAGG;AACH,qBAAa,KAAK;IAChB,OAAO,CAAC,CAAC,CAAQ;IACjB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAU;gBAElB,CAAC,SAAY;IAO1B,SAAS,IAAK,IAAI;IAMlB,QAAQ,IAAK,KAAK;IAIlB,SAAS,IAAK,MAAM;IAIpB,WAAW,IAAK,IAAI;CAKrB"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/nonce.js b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/nonce.js new file mode 100644 index 000000000..0130475cf --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/nonce.js @@ -0,0 +1,42 @@ +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc'; +export const MIN_NONCE = 0; +// For performance reasons, the nonce is represented as a JS `number` +// Although JS `number` can safely represent integers up to 2 ** 53 - 1, we choose to only use +// 4 bytes to store the data for performance reason. +// This is a slight deviation from the noise spec, which describes the max nonce as 2 ** 64 - 2 +// The effect is that this implementation will need a new handshake to be performed after fewer messages are exchanged than other implementations with full uint64 nonces. +// this MAX_NONCE is still a large number of messages, so the practical effect of this is negligible. +export const MAX_NONCE = 0xffffffff; +const ERR_MAX_NONCE = 'Cipherstate has reached maximum n, a new handshake must be performed'; +/** + * The nonce is an uint that's increased over time. + * Maintaining different representations help improve performance. + */ +export class Nonce { + n; + bytes; + view; + constructor(n = MIN_NONCE) { + this.n = n; + this.bytes = uint8ArrayAlloc(12); + this.view = new DataView(this.bytes.buffer, this.bytes.byteOffset, this.bytes.byteLength); + this.view.setUint32(4, n, true); + } + increment() { + this.n++; + // Even though we're treating the nonce as 8 bytes, RFC7539 specifies 12 bytes for a nonce. + this.view.setUint32(4, this.n, true); + } + getBytes() { + return this.bytes; + } + getUint64() { + return this.n; + } + assertValue() { + if (this.n > MAX_NONCE) { + throw new Error(ERR_MAX_NONCE); + } + } +} +//# sourceMappingURL=nonce.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/nonce.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/nonce.js.map new file mode 100644 index 000000000..4bd93b611 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/nonce.js.map @@ -0,0 +1 @@ +{"version":3,"file":"nonce.js","sourceRoot":"","sources":["../../src/nonce.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAG5D,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAA;AAC1B,qEAAqE;AACrE,8FAA8F;AAC9F,oDAAoD;AACpD,+FAA+F;AAC/F,0KAA0K;AAC1K,qGAAqG;AACrG,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAA;AAEnC,MAAM,aAAa,GAAG,sEAAsE,CAAA;AAE5F;;;GAGG;AACH,MAAM,OAAO,KAAK;IACR,CAAC,CAAQ;IACA,KAAK,CAAO;IACZ,IAAI,CAAU;IAE/B,YAAa,CAAC,GAAG,SAAS;QACxB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;QACV,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC,EAAE,CAAC,CAAA;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QACzF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;IACjC,CAAC;IAED,SAAS;QACP,IAAI,CAAC,CAAC,EAAE,CAAA;QACR,2FAA2F;QAC3F,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IACtC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,CAAC,CAAA;IACf,CAAC;IAED,WAAW;QACT,IAAI,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;QAChC,CAAC;IACH,CAAC;CACF"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/proto/payload.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/proto/payload.d.ts new file mode 100644 index 000000000..9d10fef73 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/proto/payload.d.ts @@ -0,0 +1,21 @@ +import { type Codec } from 'protons-runtime'; +import type { Uint8ArrayList } from 'uint8arraylist'; +export interface NoiseExtensions { + webtransportCerthashes: Uint8Array[]; +} +export declare namespace NoiseExtensions { + const codec: () => Codec; + const encode: (obj: Partial) => Uint8Array; + const decode: (buf: Uint8Array | Uint8ArrayList) => NoiseExtensions; +} +export interface NoiseHandshakePayload { + identityKey: Uint8Array; + identitySig: Uint8Array; + extensions?: NoiseExtensions; +} +export declare namespace NoiseHandshakePayload { + const codec: () => Codec; + const encode: (obj: Partial) => Uint8Array; + const decode: (buf: Uint8Array | Uint8ArrayList) => NoiseHandshakePayload; +} +//# sourceMappingURL=payload.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/proto/payload.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/proto/payload.d.ts.map new file mode 100644 index 000000000..69519e688 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/proto/payload.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../src/proto/payload.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,KAAK,EAAyC,MAAM,iBAAiB,CAAA;AAEnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,MAAM,WAAW,eAAe;IAC9B,sBAAsB,EAAE,UAAU,EAAE,CAAA;CACrC;AAED,yBAAiB,eAAe,CAAC;IAGxB,MAAM,KAAK,QAAO,MAAM,eAAe,CA4C7C,CAAA;IAEM,MAAM,MAAM,QAAS,QAAQ,eAAe,CAAC,KAAG,UAEtD,CAAA;IAEM,MAAM,MAAM,QAAS,UAAU,GAAG,cAAc,KAAG,eAEzD,CAAA;CACF;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,UAAU,CAAA;IACvB,WAAW,EAAE,UAAU,CAAA;IACvB,UAAU,CAAC,EAAE,eAAe,CAAA;CAC7B;AAED,yBAAiB,qBAAqB,CAAC;IAG9B,MAAM,KAAK,QAAO,MAAM,qBAAqB,CA6DnD,CAAA;IAEM,MAAM,MAAM,QAAS,QAAQ,qBAAqB,CAAC,KAAG,UAE5D,CAAA;IAEM,MAAM,MAAM,QAAS,UAAU,GAAG,cAAc,KAAG,qBAEzD,CAAA;CACF"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/proto/payload.js b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/proto/payload.js new file mode 100644 index 000000000..6ff217bdf --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/proto/payload.js @@ -0,0 +1,119 @@ +/* eslint-disable import/export */ +/* eslint-disable complexity */ +/* eslint-disable @typescript-eslint/no-namespace */ +/* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */ +/* eslint-disable @typescript-eslint/no-empty-interface */ +import { decodeMessage, encodeMessage, message } from 'protons-runtime'; +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc'; +export var NoiseExtensions; +(function (NoiseExtensions) { + let _codec; + NoiseExtensions.codec = () => { + if (_codec == null) { + _codec = message((obj, w, opts = {}) => { + if (opts.lengthDelimited !== false) { + w.fork(); + } + if (obj.webtransportCerthashes != null) { + for (const value of obj.webtransportCerthashes) { + w.uint32(10); + w.bytes(value); + } + } + if (opts.lengthDelimited !== false) { + w.ldelim(); + } + }, (reader, length) => { + const obj = { + webtransportCerthashes: [] + }; + const end = length == null ? reader.len : reader.pos + length; + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: { + obj.webtransportCerthashes.push(reader.bytes()); + break; + } + default: { + reader.skipType(tag & 7); + break; + } + } + } + return obj; + }); + } + return _codec; + }; + NoiseExtensions.encode = (obj) => { + return encodeMessage(obj, NoiseExtensions.codec()); + }; + NoiseExtensions.decode = (buf) => { + return decodeMessage(buf, NoiseExtensions.codec()); + }; +})(NoiseExtensions || (NoiseExtensions = {})); +export var NoiseHandshakePayload; +(function (NoiseHandshakePayload) { + let _codec; + NoiseHandshakePayload.codec = () => { + if (_codec == null) { + _codec = message((obj, w, opts = {}) => { + if (opts.lengthDelimited !== false) { + w.fork(); + } + if ((obj.identityKey != null && obj.identityKey.byteLength > 0)) { + w.uint32(10); + w.bytes(obj.identityKey); + } + if ((obj.identitySig != null && obj.identitySig.byteLength > 0)) { + w.uint32(18); + w.bytes(obj.identitySig); + } + if (obj.extensions != null) { + w.uint32(34); + NoiseExtensions.codec().encode(obj.extensions, w); + } + if (opts.lengthDelimited !== false) { + w.ldelim(); + } + }, (reader, length) => { + const obj = { + identityKey: uint8ArrayAlloc(0), + identitySig: uint8ArrayAlloc(0) + }; + const end = length == null ? reader.len : reader.pos + length; + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: { + obj.identityKey = reader.bytes(); + break; + } + case 2: { + obj.identitySig = reader.bytes(); + break; + } + case 4: { + obj.extensions = NoiseExtensions.codec().decode(reader, reader.uint32()); + break; + } + default: { + reader.skipType(tag & 7); + break; + } + } + } + return obj; + }); + } + return _codec; + }; + NoiseHandshakePayload.encode = (obj) => { + return encodeMessage(obj, NoiseHandshakePayload.codec()); + }; + NoiseHandshakePayload.decode = (buf) => { + return decodeMessage(buf, NoiseHandshakePayload.codec()); + }; +})(NoiseHandshakePayload || (NoiseHandshakePayload = {})); +//# sourceMappingURL=payload.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/proto/payload.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/proto/payload.js.map new file mode 100644 index 000000000..7b990cd53 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/proto/payload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"payload.js","sourceRoot":"","sources":["../../../src/proto/payload.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/utils.d.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/utils.d.ts new file mode 100644 index 000000000..8f125ba47 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/utils.d.ts @@ -0,0 +1,21 @@ +import { type Uint8ArrayList } from 'uint8arraylist'; +import { type NoiseExtensions, NoiseHandshakePayload } from './proto/payload.js'; +import type { bytes } from './@types/basic.js'; +import type { PeerId } from '@libp2p/interface'; +export declare function getPayload(localPeer: PeerId, staticPublicKey: bytes, extensions?: NoiseExtensions): Promise; +export declare function createHandshakePayload(libp2pPublicKey: Uint8Array, signedPayload: Uint8Array, extensions?: NoiseExtensions): bytes; +export declare function signPayload(peerId: PeerId, payload: Uint8Array | Uint8ArrayList): Promise; +export declare function getPeerIdFromPayload(payload: NoiseHandshakePayload): Promise; +export declare function decodePayload(payload: Uint8Array | Uint8ArrayList): NoiseHandshakePayload; +export declare function getHandshakePayload(publicKey: Uint8Array | Uint8ArrayList): Uint8Array | Uint8ArrayList; +/** + * Verifies signed payload, throws on any irregularities. + * + * @param {bytes} noiseStaticKey - owner's noise static key + * @param {bytes} payload - decoded payload + * @param {PeerId} remotePeer - owner's libp2p peer ID + * @returns {Promise} - peer ID of payload owner + */ +export declare function verifySignedPayload(noiseStaticKey: Uint8Array | Uint8ArrayList, payload: NoiseHandshakePayload, remotePeer: PeerId): Promise; +export declare function isValidPublicKey(pk: Uint8Array | Uint8ArrayList): boolean; +//# sourceMappingURL=utils.d.ts.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/utils.d.ts.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/utils.d.ts.map new file mode 100644 index 000000000..0d471017d --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/utils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,cAAc,EAAoB,MAAM,gBAAgB,CAAA;AAGtE,OAAO,EAAE,KAAK,eAAe,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAChF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE/C,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,KAAK,EACtB,UAAU,CAAC,EAAE,eAAe,GAC3B,OAAO,CAAC,KAAK,CAAC,CAYhB;AAED,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,UAAU,EAC3B,aAAa,EAAE,UAAU,EACzB,UAAU,CAAC,EAAE,eAAe,GAC3B,KAAK,CAMP;AAED,wBAAsB,WAAW,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,CAQvG;AAED,wBAAsB,oBAAoB,CAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAE3F;AAED,wBAAgB,aAAa,CAAE,OAAO,EAAE,UAAU,GAAG,cAAc,GAAG,qBAAqB,CAE1F;AAED,wBAAgB,mBAAmB,CAAE,SAAS,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,GAAG,cAAc,CAUxG;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,cAAc,EAAE,UAAU,GAAG,cAAc,EAC3C,OAAO,EAAE,qBAAqB,EAC9B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAyBjB;AAED,wBAAgB,gBAAgB,CAAE,EAAE,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,CAU1E"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/utils.js b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/utils.js new file mode 100644 index 000000000..f0325ded9 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/utils.js @@ -0,0 +1,79 @@ +import { unmarshalPublicKey, unmarshalPrivateKey } from '@libp2p/crypto/keys'; +import { peerIdFromKeys } from '@libp2p/peer-id'; +import { isUint8ArrayList } from 'uint8arraylist'; +import { concat as uint8ArrayConcat } from 'uint8arrays/concat'; +import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'; +import { NoiseHandshakePayload } from './proto/payload.js'; +export async function getPayload(localPeer, staticPublicKey, extensions) { + const signedPayload = await signPayload(localPeer, getHandshakePayload(staticPublicKey)); + if (localPeer.publicKey == null) { + throw new Error('PublicKey was missing from local PeerId'); + } + return createHandshakePayload(localPeer.publicKey, signedPayload, extensions); +} +export function createHandshakePayload(libp2pPublicKey, signedPayload, extensions) { + return NoiseHandshakePayload.encode({ + identityKey: libp2pPublicKey, + identitySig: signedPayload, + extensions: extensions ?? { webtransportCerthashes: [] } + }).subarray(); +} +export async function signPayload(peerId, payload) { + if (peerId.privateKey == null) { + throw new Error('PrivateKey was missing from PeerId'); + } + const privateKey = await unmarshalPrivateKey(peerId.privateKey); + return privateKey.sign(payload); +} +export async function getPeerIdFromPayload(payload) { + return peerIdFromKeys(payload.identityKey); +} +export function decodePayload(payload) { + return NoiseHandshakePayload.decode(payload); +} +export function getHandshakePayload(publicKey) { + const prefix = uint8ArrayFromString('noise-libp2p-static-key:'); + if (publicKey instanceof Uint8Array) { + return uint8ArrayConcat([prefix, publicKey], prefix.length + publicKey.length); + } + publicKey.prepend(prefix); + return publicKey; +} +/** + * Verifies signed payload, throws on any irregularities. + * + * @param {bytes} noiseStaticKey - owner's noise static key + * @param {bytes} payload - decoded payload + * @param {PeerId} remotePeer - owner's libp2p peer ID + * @returns {Promise} - peer ID of payload owner + */ +export async function verifySignedPayload(noiseStaticKey, payload, remotePeer) { + // Unmarshaling from PublicKey protobuf + const payloadPeerId = await peerIdFromKeys(payload.identityKey); + if (!payloadPeerId.equals(remotePeer)) { + throw new Error(`Payload identity key ${payloadPeerId.toString()} does not match expected remote peer ${remotePeer.toString()}`); + } + const generatedPayload = getHandshakePayload(noiseStaticKey); + if (payloadPeerId.publicKey == null) { + throw new Error('PublicKey was missing from PeerId'); + } + if (payload.identitySig == null) { + throw new Error('Signature was missing from message'); + } + const publicKey = unmarshalPublicKey(payloadPeerId.publicKey); + const valid = await publicKey.verify(generatedPayload, payload.identitySig); + if (!valid) { + throw new Error("Static key doesn't match to peer that signed payload!"); + } + return payloadPeerId; +} +export function isValidPublicKey(pk) { + if (!(pk instanceof Uint8Array) && !(isUint8ArrayList(pk))) { + return false; + } + if (pk.byteLength !== 32) { + return false; + } + return true; +} +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/utils.js.map b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/utils.js.map new file mode 100644 index 000000000..d7076f918 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/src/utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/tsconfig.tsbuildinfo b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/tsconfig.tsbuildinfo new file mode 100644 index 000000000..b0f4ad4b1 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/dist/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"program":{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/typescript/lib/lib.es2022.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.webworker.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/typescript/lib/lib.es2022.array.d.ts","../node_modules/typescript/lib/lib.es2022.error.d.ts","../node_modules/typescript/lib/lib.es2022.intl.d.ts","../node_modules/typescript/lib/lib.es2022.object.d.ts","../node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2022.string.d.ts","../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../src/constants.ts","../node_modules/uint8arraylist/dist/src/index.d.ts","../src/@types/basic.ts","../node_modules/protons-runtime/dist/src/codec.d.ts","../node_modules/protons-runtime/dist/src/decode.d.ts","../node_modules/protons-runtime/dist/src/encode.d.ts","../node_modules/protons-runtime/dist/src/codecs/enum.d.ts","../node_modules/protons-runtime/dist/src/codecs/message.d.ts","../node_modules/protons-runtime/dist/src/utils/reader.d.ts","../node_modules/protons-runtime/dist/src/utils/writer.d.ts","../node_modules/protons-runtime/dist/src/index.d.ts","../node_modules/uint8arrays/dist/src/alloc.d.ts","../src/proto/payload.ts","../node_modules/multiformats/dist/types/src/bases/interface.d.ts","../node_modules/multiformats/dist/types/src/block/interface.d.ts","../node_modules/multiformats/dist/types/src/hashes/interface.d.ts","../node_modules/multiformats/dist/types/src/link/interface.d.ts","../node_modules/multiformats/dist/types/src/cid.d.ts","../node_modules/@libp2p/interface/dist/src/peer-id/index.d.ts","../node_modules/@multiformats/multiaddr/dist/src/protocols-table.d.ts","../node_modules/@multiformats/multiaddr/dist/src/filter/multiaddr-filter.d.ts","../node_modules/@multiformats/multiaddr/dist/src/index.d.ts","../node_modules/it-stream-types/dist/src/index.d.ts","../node_modules/@libp2p/interface/dist/src/connection/index.d.ts","../node_modules/@libp2p/interface/dist/src/peer-info/index.d.ts","../node_modules/@libp2p/interface/dist/src/content-routing/index.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/buffer/index.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/file.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/filereader.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/index.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/dom-events.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/globals.global.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/@libp2p/interface/dist/src/events.d.ts","../node_modules/@libp2p/interface/dist/src/metrics/index.d.ts","../node_modules/@libp2p/interface/dist/src/peer-routing/index.d.ts","../node_modules/@libp2p/interface/dist/src/peer-store/index.d.ts","../node_modules/@libp2p/interface/dist/src/startable.d.ts","../node_modules/@libp2p/interface/dist/src/stream-handler/index.d.ts","../node_modules/@libp2p/interface/dist/src/topology/index.d.ts","../node_modules/@libp2p/interface/dist/src/stream-muxer/index.d.ts","../node_modules/@libp2p/interface/dist/src/transport/index.d.ts","../node_modules/@libp2p/interface/dist/src/connection-encrypter/index.d.ts","../node_modules/@libp2p/interface/dist/src/connection-gater/index.d.ts","../node_modules/@libp2p/interface/dist/src/keys/index.d.ts","../node_modules/@libp2p/interface/dist/src/peer-discovery/index.d.ts","../node_modules/@libp2p/interface/dist/src/peer-store/tags.d.ts","../node_modules/it-pushable/dist/src/index.d.ts","../node_modules/@libp2p/interface/dist/src/pubsub/index.d.ts","../node_modules/@libp2p/interface/dist/src/record/index.d.ts","../node_modules/@libp2p/interface/dist/src/errors.d.ts","../node_modules/@libp2p/interface/dist/src/index.d.ts","../src/@types/libp2p.ts","../src/nonce.ts","../src/@types/handshake.ts","../src/crypto.ts","../node_modules/it-length-prefixed/dist/src/encode.d.ts","../node_modules/it-reader/dist/src/index.d.ts","../node_modules/it-length-prefixed/dist/src/decode.d.ts","../node_modules/it-length-prefixed/dist/src/index.d.ts","../src/encoder.ts","../src/errors.ts","../node_modules/multiformats/dist/types/src/codecs/interface.d.ts","../node_modules/multiformats/dist/types/src/interface.d.ts","../node_modules/multiformats/dist/types/src/hashes/digest.d.ts","../node_modules/multiformats/dist/types/src/hashes/hasher.d.ts","../node_modules/multiformats/dist/types/src/varint.d.ts","../node_modules/multiformats/dist/types/src/bytes.d.ts","../node_modules/multiformats/dist/types/src/index.d.ts","../node_modules/@libp2p/crypto/dist/src/keys/ed25519-class.d.ts","../node_modules/@libp2p/crypto/dist/src/keys/interface.d.ts","../node_modules/@libp2p/crypto/dist/src/keys/ecdh.d.ts","../node_modules/@libp2p/crypto/dist/src/keys/ephemeral-keys.d.ts","../node_modules/@libp2p/crypto/dist/src/keys/key-stretcher.d.ts","../node_modules/@libp2p/crypto/dist/src/keys/keys.d.ts","../node_modules/@libp2p/crypto/dist/src/keys/rsa-class.d.ts","../node_modules/@libp2p/crypto/dist/src/keys/secp256k1-class.d.ts","../node_modules/@libp2p/crypto/dist/src/keys/index.d.ts","../node_modules/@libp2p/peer-id/dist/src/index.d.ts","../node_modules/uint8arrays/dist/src/concat.d.ts","../node_modules/multiformats/dist/types/src/codecs/raw.d.ts","../node_modules/multiformats/dist/types/src/codecs/json.d.ts","../node_modules/multiformats/dist/types/src/bases/base.d.ts","../node_modules/multiformats/dist/types/src/basics.d.ts","../node_modules/uint8arrays/dist/src/util/bases.d.ts","../node_modules/uint8arrays/dist/src/from-string.d.ts","../src/utils.ts","../node_modules/uint8arrays/dist/src/compare.d.ts","../node_modules/uint8arrays/dist/src/equals.d.ts","../node_modules/uint8arrays/dist/src/to-string.d.ts","../node_modules/uint8arrays/dist/src/xor.d.ts","../node_modules/uint8arrays/dist/src/index.d.ts","../node_modules/it-byte-stream/dist/src/index.d.ts","../node_modules/it-length-prefixed-stream/dist/src/index.d.ts","../node_modules/it-pair/dist/src/duplex.d.ts","../node_modules/it-pipe/dist/src/index.d.ts","../node_modules/@chainsafe/as-chacha20poly1305/lib/src/types.d.ts","../node_modules/@chainsafe/as-chacha20poly1305/lib/src/wasm.d.ts","../node_modules/@chainsafe/as-chacha20poly1305/lib/src/chacha20poly1305.d.ts","../node_modules/@chainsafe/as-chacha20poly1305/lib/src/poly1305.d.ts","../node_modules/@chainsafe/as-chacha20poly1305/lib/src/chacha20.d.ts","../node_modules/@chainsafe/as-chacha20poly1305/lib/src/index.d.ts","../node_modules/@chainsafe/as-sha256/lib/hashobject.d.ts","../node_modules/@chainsafe/as-sha256/lib/wasm.d.ts","../node_modules/@chainsafe/as-sha256/lib/sha256.d.ts","../node_modules/@chainsafe/as-sha256/lib/index.d.ts","../node_modules/wherearewe/dist/src/index.d.ts","../node_modules/@noble/ciphers/utils.d.ts","../node_modules/@noble/ciphers/chacha.d.ts","../node_modules/@noble/curves/abstract/utils.d.ts","../node_modules/@noble/curves/abstract/modular.d.ts","../node_modules/@noble/curves/abstract/curve.d.ts","../node_modules/@noble/curves/abstract/edwards.d.ts","../node_modules/@noble/curves/abstract/hash-to-curve.d.ts","../node_modules/@noble/curves/abstract/montgomery.d.ts","../node_modules/@noble/curves/ed25519.d.ts","../node_modules/@noble/hashes/utils.d.ts","../node_modules/@noble/hashes/hkdf.d.ts","../node_modules/@noble/hashes/_sha2.d.ts","../node_modules/@noble/hashes/sha256.d.ts","../src/crypto/js.ts","../src/crypto/index.ts","../src/@types/handshake-interface.ts","../src/metrics.ts","../src/crypto/streaming.ts","../src/noise.ts","../src/index.ts","../src/handshakes/abstract-handshake.ts","../src/handshakes/xx.ts","../src/logger.ts","../src/handshake-xx.ts","../src/crypto/index.browser.ts","../node_modules/@libp2p/interface-compliance-tests/dist/src/index.d.ts","../node_modules/@libp2p/interface-compliance-tests/dist/src/connection-encryption/index.d.ts","../node_modules/@libp2p/logger/dist/src/index.d.ts","../test/compliance.spec.ts","../node_modules/@types/chai/index.d.ts","../node_modules/@types/chai-as-promised/index.d.ts","../node_modules/chai-parentheses/index.d.ts","../node_modules/@types/chai-subset/index.d.ts","../node_modules/chai-bites/index.d.ts","../node_modules/@types/chai-string/index.d.ts","../node_modules/aegir/dist/utils/chai.d.ts","../node_modules/@types/sinonjs__fake-timers/index.d.ts","../node_modules/@types/sinon/index.d.ts","../node_modules/@libp2p/peer-id-factory/node_modules/@libp2p/interface/dist/src/keys/index.d.ts","../node_modules/@libp2p/peer-id-factory/node_modules/@libp2p/interface/dist/src/peer-id/index.d.ts","../node_modules/@libp2p/peer-id-factory/dist/src/index.d.ts","../test/fixtures/peer.ts","../test/index.spec.ts","../node_modules/@chainsafe/libp2p-yamux/dist/src/config.d.ts","../node_modules/@chainsafe/libp2p-yamux/dist/src/frame.d.ts","../node_modules/@libp2p/utils/dist/src/abstract-stream.d.ts","../node_modules/@chainsafe/libp2p-yamux/dist/src/stream.d.ts","../node_modules/@chainsafe/libp2p-yamux/dist/src/muxer.d.ts","../node_modules/@chainsafe/libp2p-yamux/dist/src/index.d.ts","../node_modules/@libp2p/daemon-protocol/dist/src/index.d.ts","../node_modules/@libp2p/daemon-protocol/dist/src/stream-handler.d.ts","../node_modules/@libp2p/daemon-client/node_modules/@libp2p/interface/dist/src/peer-id/index.d.ts","../node_modules/@libp2p/daemon-client/node_modules/@libp2p/interface/dist/src/peer-info/index.d.ts","../node_modules/@libp2p/daemon-client/dist/src/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/events.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/peer-info/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/content-routing/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/keys/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/peer-id/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/keychain/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/metrics/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/peer-routing/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/peer-store/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/startable.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/stream-handler/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/topology/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/stream-muxer/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/transport/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/connection/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/interface/dist/src/pubsub/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/node_modules/@libp2p/logger/dist/src/index.d.ts","../node_modules/protobufjs/index.d.ts","../node_modules/protobufjs/minimal.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/message/rpc.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/message/decoderpc.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/types.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/message-cache.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score-thresholds.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/metrics.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score-params.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/utils/set.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-stats.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/compute-score.d.ts","../node_modules/denque/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/message-deliveries.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/peer-score.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/score/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/stream.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/tracer.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/config.d.ts","../node_modules/@libp2p/interface-internal/node_modules/@libp2p/interface/dist/src/index.d.ts","../node_modules/@libp2p/interface-internal/node_modules/@libp2p/interface/dist/src/connection/index.d.ts","../node_modules/@libp2p/interface-internal/node_modules/@libp2p/interface/dist/src/peer-id/index.d.ts","../node_modules/@libp2p/interface-internal/node_modules/@libp2p/peer-collections/dist/src/map.d.ts","../node_modules/@libp2p/interface-internal/node_modules/@libp2p/peer-collections/dist/src/set.d.ts","../node_modules/@libp2p/interface-internal/node_modules/@libp2p/peer-collections/dist/src/list.d.ts","../node_modules/@libp2p/interface-internal/node_modules/@libp2p/peer-collections/dist/src/index.d.ts","../node_modules/@libp2p/interface-internal/dist/src/connection-manager/index.d.ts","../node_modules/@libp2p/interface-internal/node_modules/@libp2p/interface/dist/src/topology/index.d.ts","../node_modules/@libp2p/interface-internal/dist/src/registrar/index.d.ts","../node_modules/@chainsafe/libp2p-gossipsub/dist/src/index.d.ts","../node_modules/@libp2p/daemon-server/node_modules/@libp2p/interface/dist/src/index.d.ts","../node_modules/@libp2p/daemon-server/node_modules/@libp2p/interface/dist/src/connection/index.d.ts","../node_modules/@libp2p/kad-dht/node_modules/@libp2p/interface/dist/src/peer-id/index.d.ts","../node_modules/@libp2p/kad-dht/node_modules/@libp2p/interface/dist/src/startable.d.ts","../node_modules/interface-datastore/dist/src/key.d.ts","../node_modules/interface-store/dist/src/index.d.ts","../node_modules/interface-datastore/dist/src/index.d.ts","../node_modules/@libp2p/kad-dht/dist/src/providers.d.ts","../node_modules/@libp2p/kad-dht/node_modules/@libp2p/interface/dist/src/index.d.ts","../node_modules/@libp2p/kad-dht/node_modules/@libp2p/interface/dist/src/events.d.ts","../node_modules/@libp2p/kad-dht/node_modules/@libp2p/interface/dist/src/metrics/index.d.ts","../node_modules/@libp2p/kad-dht/node_modules/@libp2p/interface/dist/src/peer-info/index.d.ts","../node_modules/@libp2p/kad-dht/node_modules/@libp2p/interface/dist/src/peer-store/index.d.ts","../node_modules/@libp2p/interface-internal/dist/src/address-manager/index.d.ts","../node_modules/progress-events/dist/src/index.d.ts","../node_modules/@libp2p/kad-dht/dist/src/record/record.d.ts","../node_modules/@libp2p/kad-dht/dist/src/record/index.d.ts","../node_modules/@libp2p/kad-dht/dist/src/index.d.ts","../node_modules/@libp2p/daemon-server/dist/src/index.d.ts","../node_modules/@libp2p/interop/dist/src/connect.d.ts","../node_modules/@libp2p/interop/dist/src/dht/index.d.ts","../node_modules/@libp2p/interop/dist/src/pubsub/index.d.ts","../node_modules/@libp2p/interop/dist/src/relay/index.d.ts","../node_modules/@libp2p/interop/dist/src/streams/index.d.ts","../node_modules/@libp2p/interop/dist/src/index.d.ts","../node_modules/@libp2p/tcp/dist/src/listener.d.ts","../node_modules/@libp2p/tcp/dist/src/index.d.ts","../node_modules/execa/index.d.ts","../node_modules/go-libp2p/dist/src/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/peer-id/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/connection/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/peer-info/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/content-routing/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/events.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/metrics/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/peer-routing/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/peer-store/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/startable.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/stream-handler/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/topology/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/stream-muxer/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/transport/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/connection-encrypter/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/connection-gater/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/keys/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/peer-discovery/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/peer-store/tags.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/pubsub/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/record/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/errors.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface/dist/src/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface-internal/dist/src/address-manager/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/peer-collections/dist/src/map.d.ts","../node_modules/libp2p/node_modules/@libp2p/peer-collections/dist/src/set.d.ts","../node_modules/libp2p/node_modules/@libp2p/peer-collections/dist/src/list.d.ts","../node_modules/libp2p/node_modules/@libp2p/peer-collections/dist/src/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface-internal/dist/src/connection-manager/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface-internal/dist/src/record/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface-internal/dist/src/registrar/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface-internal/dist/src/transport-manager/index.d.ts","../node_modules/libp2p/node_modules/@libp2p/interface-internal/dist/src/index.d.ts","../node_modules/libp2p/dist/src/address-manager/index.d.ts","../node_modules/libp2p/dist/src/components.d.ts","../node_modules/libp2p/dist/src/connection-manager/auto-dial.d.ts","../node_modules/libp2p/dist/src/connection-manager/connection-pruner.d.ts","../node_modules/eventemitter3/index.d.ts","../node_modules/p-queue/dist/queue.d.ts","../node_modules/p-queue/dist/options.d.ts","../node_modules/p-queue/dist/priority-queue.d.ts","../node_modules/p-queue/dist/index.d.ts","../node_modules/libp2p/dist/src/connection-manager/dial-queue.d.ts","../node_modules/libp2p/dist/src/connection-manager/index.d.ts","../node_modules/libp2p/dist/src/transport-manager.d.ts","../node_modules/@libp2p/peer-store/node_modules/@libp2p/interface/dist/src/index.d.ts","../node_modules/@libp2p/peer-store/dist/src/index.d.ts","../node_modules/libp2p/dist/src/index.d.ts","../node_modules/p-defer/index.d.ts","../test/interop.ts","../node_modules/iso-random-stream/dist/src/index.d.ts","../node_modules/@libp2p/crypto/dist/src/aes/index.d.ts","../node_modules/@libp2p/crypto/dist/src/hmac/index.d.ts","../node_modules/@libp2p/crypto/dist/src/pbkdf2.d.ts","../node_modules/@libp2p/crypto/dist/src/random-bytes.d.ts","../node_modules/@libp2p/crypto/dist/src/index.d.ts","../test/utils.ts","../test/noise.spec.ts","../test/xx-handshake.spec.ts","../test/handshakes/xx.spec.ts","../node_modules/keyv/src/index.d.ts","../node_modules/@types/http-cache-semantics/index.d.ts","../node_modules/@types/responselike/index.d.ts","../node_modules/@types/cacheable-request/index.d.ts","../node_modules/@types/ms/index.d.ts","../node_modules/@types/debug/index.d.ts","../node_modules/@types/istanbul-lib-coverage/index.d.ts","../node_modules/@types/json-schema/index.d.ts","../node_modules/@types/json5/index.d.ts","../node_modules/@types/keyv/index.d.ts","../node_modules/@types/linkify-it/index.d.ts","../node_modules/@types/mdurl/encode.d.ts","../node_modules/@types/mdurl/decode.d.ts","../node_modules/@types/mdurl/parse.d.ts","../node_modules/@types/mdurl/format.d.ts","../node_modules/@types/mdurl/index.d.ts","../node_modules/@types/markdown-it/lib/common/utils.d.ts","../node_modules/@types/markdown-it/lib/token.d.ts","../node_modules/@types/markdown-it/lib/rules_inline/state_inline.d.ts","../node_modules/@types/markdown-it/lib/helpers/parse_link_label.d.ts","../node_modules/@types/markdown-it/lib/helpers/parse_link_destination.d.ts","../node_modules/@types/markdown-it/lib/helpers/parse_link_title.d.ts","../node_modules/@types/markdown-it/lib/helpers/index.d.ts","../node_modules/@types/markdown-it/lib/ruler.d.ts","../node_modules/@types/markdown-it/lib/rules_block/state_block.d.ts","../node_modules/@types/markdown-it/lib/parser_block.d.ts","../node_modules/@types/markdown-it/lib/rules_core/state_core.d.ts","../node_modules/@types/markdown-it/lib/parser_core.d.ts","../node_modules/@types/markdown-it/lib/parser_inline.d.ts","../node_modules/@types/markdown-it/lib/renderer.d.ts","../node_modules/@types/markdown-it/lib/index.d.ts","../node_modules/@types/markdown-it/index.d.ts","../node_modules/@types/unist/index.d.ts","../node_modules/@types/mdast/index.d.ts","../node_modules/@types/minimatch/index.d.ts","../node_modules/@types/minimist/index.d.ts","../node_modules/@types/mocha/index.d.ts","../node_modules/@types/normalize-package-data/index.d.ts","../node_modules/@types/parse-json/index.d.ts","../node_modules/@types/retry/index.d.ts","../node_modules/@types/semver/classes/semver.d.ts","../node_modules/@types/semver/functions/parse.d.ts","../node_modules/@types/semver/functions/valid.d.ts","../node_modules/@types/semver/functions/clean.d.ts","../node_modules/@types/semver/functions/inc.d.ts","../node_modules/@types/semver/functions/diff.d.ts","../node_modules/@types/semver/functions/major.d.ts","../node_modules/@types/semver/functions/minor.d.ts","../node_modules/@types/semver/functions/patch.d.ts","../node_modules/@types/semver/functions/prerelease.d.ts","../node_modules/@types/semver/functions/compare.d.ts","../node_modules/@types/semver/functions/rcompare.d.ts","../node_modules/@types/semver/functions/compare-loose.d.ts","../node_modules/@types/semver/functions/compare-build.d.ts","../node_modules/@types/semver/functions/sort.d.ts","../node_modules/@types/semver/functions/rsort.d.ts","../node_modules/@types/semver/functions/gt.d.ts","../node_modules/@types/semver/functions/lt.d.ts","../node_modules/@types/semver/functions/eq.d.ts","../node_modules/@types/semver/functions/neq.d.ts","../node_modules/@types/semver/functions/gte.d.ts","../node_modules/@types/semver/functions/lte.d.ts","../node_modules/@types/semver/functions/cmp.d.ts","../node_modules/@types/semver/functions/coerce.d.ts","../node_modules/@types/semver/classes/comparator.d.ts","../node_modules/@types/semver/classes/range.d.ts","../node_modules/@types/semver/functions/satisfies.d.ts","../node_modules/@types/semver/ranges/max-satisfying.d.ts","../node_modules/@types/semver/ranges/min-satisfying.d.ts","../node_modules/@types/semver/ranges/to-comparators.d.ts","../node_modules/@types/semver/ranges/min-version.d.ts","../node_modules/@types/semver/ranges/valid.d.ts","../node_modules/@types/semver/ranges/outside.d.ts","../node_modules/@types/semver/ranges/gtr.d.ts","../node_modules/@types/semver/ranges/ltr.d.ts","../node_modules/@types/semver/ranges/intersects.d.ts","../node_modules/@types/semver/ranges/simplify.d.ts","../node_modules/@types/semver/ranges/subset.d.ts","../node_modules/@types/semver/internals/identifiers.d.ts","../node_modules/@types/semver/index.d.ts","../node_modules/@types/strip-bom/index.d.ts","../node_modules/@types/strip-json-comments/index.d.ts","../node_modules/@types/yargs-parser/index.d.ts","../node_modules/@types/yargs/index.d.ts","../node_modules/@types/yauzl/index.d.ts"],"fileInfos":[{"version":"f33e5332b24c3773e930e212cbb8b6867c8ba3ec4492064ea78e55a524d57450","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","26f2f787e82c4222710f3b676b4d83eb5ad0a72fa7b746f03449e7a026ce5073","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc",{"version":"21e41a76098aa7a191028256e52a726baafd45a925ea5cf0222eb430c96c1d83","affectsGlobalScope":true},{"version":"35299ae4a62086698444a5aaee27fc7aa377c68cbb90b441c9ace246ffd05c97","affectsGlobalScope":true},{"version":"5746fca0ef5189a855357e258108524603574457c811ce8143e3279efde9f5b6","affectsGlobalScope":true},{"version":"138fb588d26538783b78d1e3b2c2cc12d55840b97bf5e08bca7f7a174fbe2f17","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"e0275cd0e42990dc3a16f0b7c8bca3efe87f1c8ad404f80c6db1c7c0b828c59f","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"49ed889be54031e1044af0ad2c603d627b8bda8b50c1a68435fe85583901d072","affectsGlobalScope":true},{"version":"e93d098658ce4f0c8a0779e6cab91d0259efb88a318137f686ad76f8410ca270","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"ec0104fee478075cb5171e5f4e3f23add8e02d845ae0165bfa3f1099241fa2aa","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"acae90d417bee324b1372813b5a00829d31c7eb670d299cd7f8f9a648ac05688","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"51e547984877a62227042850456de71a5c45e7fe86b7c975c6e68896c86fa23b","affectsGlobalScope":true},{"version":"62a4966981264d1f04c44eb0f4b5bdc3d81c1a54725608861e44755aa24ad6a5","affectsGlobalScope":true},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true},{"version":"86a34c7a13de9cabc43161348f663624b56871ed80986e41d214932ddd8d6719","affectsGlobalScope":true},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true},{"version":"50d53ccd31f6667aff66e3d62adf948879a3a16f05d89882d1188084ee415bbc","affectsGlobalScope":true},{"version":"13f6e6380c78e15e140243dc4be2fa546c287c6d61f4729bc2dd7cf449605471","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},{"version":"1bc2fdadc59c4529e51cd693e1bb45c0f9d6c4cf079b008fa3a17da4cd08af44","signature":"a5b2968580425f209992ad1d8a62ab079d84643e00e0f0b11f65fe6423a643f5"},"d35b5db21a04a45ae6323c4d4b25acc983dfe2870fc670fd05249eb19d839a5e",{"version":"a00b40912153391370bfc844161907779723e82cd2d671b3bebea763212f048e","signature":"35095a100857bdbca3c31ddd6e1eb18259140dee0092d97e631889daf084eaec"},"fd617cc8eec6f43227ab572160bac9d23c723073e83a9b100bd15c758eff34c2","ec3786b43d68955ecdb12ce679d3bc61b6b25c4d0ac5bcdaf50fa4a746189b98","3155e98b0df0c1523715e8a1c75c8a67c401aeb58d6eccf8bd89d5d775b8c1cf","fa82b7b22d9df87323e31e9e2ad75911028f3e544647fd212424b3c4452fee3f","90aa0b916eef195a17c3dbd621746f82ac7969ecc3dbf27c81ee4c68c5af7f25","9ceec2a882368c0160a8a3879aa0efce0fb985751fc23ff6191006030969cfa4","cad5d6451789234434c28dd2d6a8267b0d64c479b1ad267321faa31ba90d570b","e0e8254f7a1a21b5768beb4dbc9d4574ce67aefa59d88251d16b17c658f2a69e","c33b700f5d0797c331e08b29f8440204e19cf035555ea9111321f881f1b4702a",{"version":"b2d663f1f5da5b395c5dc6ba6dbc633d61580235f82faaca06bf420fcdae46cf","signature":"6744c64cda78d6af7280d69c20ead828fa4296efe0b582548cb10ab66914993d"},"f997c5be1eb27b8c37d50d3f61fc5671fb79efd80c499e0e16b5d56c32182f8d","e68d682c8224a5c2e5f5e3720537cec720c41a829e1367316ea9acf6fec48ecc","0828334538f604701c9dd0bf54abb758803f9efb4acb4aedd9b18acde4b1bcdf","552223520e823223ee13c5764e9b69b1819c985818a8bcda435d8d1dbd909bee","671efcb4cb21897b43dec53d0218afcac3d1e13c7d50158b0c1a0b300acdb69e","626c33bed7b1e4df8b77660be5853c9e0abecdf3fadbc170368255f0b9fe65cc","5212dd78d1d63ab33332c8846a0ea5ce248159e74033cde16de48373036b4704","d71577e78c7a4257074aaf82f595724175210c89e8b467ef82f949a6cbd891bc","ffaf24e6241a0bd700a6fba3a1390dfb7225a47a4eace0a9d24a00e9bec2b598","c84146dbc9d2e5f43d2cbf15485a4eabf90219dbb66c0d481f20f12d3851bffc","007a764c97d225fd6bf04637aead6879ffe2a9bef665ffda9a7fcef1130a8648","99c24f331c9f4e75a779b9a988e942442db3cf29923ceb820d3bdd4ed1edfef2","822608b61e6599d53757f1e39fa99897261d62ee5daa02e9059bd104b12a790a","efc7d584a33fe3422847783d228f315c4cd1afe74bd7cf8e3f0e4c1125129fef","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","7180c03fd3cb6e22f911ce9ba0f8a7008b1a6ddbe88ccf16a9c8140ef9ac1686","25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","54cb85a47d760da1c13c00add10d26b5118280d44d58e6908d8e89abbd9d7725","3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","a967bfe3ad4e62243eb604bf956101e4c740f5921277c60debaf325c1320bf88","e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","471e1da5a78350bc55ef8cef24eb3aca6174143c281b8b214ca2beda51f5e04a","cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","db3435f3525cd785bf21ec6769bf8da7e8a776be1a99e2e7efb5f244a2ef5fee","c3b170c45fc031db31f782e612adf7314b167e60439d304b49e704010e7bafe5","40383ebef22b943d503c6ce2cb2e060282936b952a01bea5f9f493d5fb487cc7","4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","33203609eba548914dc83ddf6cadbc0bcb6e8ef89f6d648ca0908ae887f9fcc5","0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","9f0a92164925aa37d4a5d9dd3e0134cff8177208dba55fd2310cd74beea40ee2","8bfdb79bf1a9d435ec48d9372dc93291161f152c0865b81fc0b2694aedb4578d","2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","4a0c3504813a3289f7fb1115db13967c8e004aa8e4f8a9021b95285502221bd1",{"version":"cc5e65fb1729463665074b9d7163e78a4225b7af7f3a6b3c74492f415166612f","affectsGlobalScope":true},"cce1f5f86974c1e916ec4a8cab6eec9aa8e31e8148845bf07fbaa8e1d97b1a2c",{"version":"185282b122cbca820c297a02a57b89cf5967ab43e220e3e174d872d3f9a94d2c","affectsGlobalScope":true},"16d74fe4d8e183344d3beb15d48b123c5980ff32ff0cc8c3b96614ddcdf9b239","7b43160a49cf2c6082da0465876c4a0b164e160b81187caeb0a6ca7a281e85ba",{"version":"41fb2a1c108fbf46609ce5a451b7ec78eb9b5ada95fd5b94643e4b26397de0b3","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb","e8968b394e4365588f8f89cfff86435258cf10062585c1d2224627ab92acda22","285e512c7a0db217a0599e18c462d565fa35be4a5153dd7b80bee88c83e83ddf","b5b719a47968cd61a6f83f437236bb6fe22a39223b6620da81ef89f5d7a78fb7","8806ae97308ef26363bd7ec8071bca4d07fb575f905ee3d8a91aff226df6d618","af5bf1db6f1804fb0069039ae77a05d60133c77a2158d9635ea27b6bb2828a8f","b7fe70be794e13d1b7940e318b8770cd1fb3eced7707805318a2e3aaac2c3e9e",{"version":"2c71199d1fc83bf17636ad5bf63a945633406b7b94887612bba4ef027c662b3e","affectsGlobalScope":true},{"version":"7ae9dc7dbb58cd843065639707815df85c044babaa0947116f97bdb824d07204","affectsGlobalScope":true},"7aae1df2053572c2cfc2089a77847aadbb38eedbaa837a846c6a49fb37c6e5bd","313a0b063f5188037db113509de1b934a0e286f14e9479af24fada241435e707","1f758340b027b18ae8773ac3d33a60648a2af49eaae9e4fde18d0a0dd608642c","87ef1a23caa071b07157c72077fa42b86d30568f9dc9e31eed24d5d14fc30ba8","396a8939b5e177542bdf9b5262b4eee85d29851b2d57681fa9d7eae30e225830","21773f5ac69ddf5a05636ba1f50b5239f4f2d27e4420db147fc2f76a5ae598ac",{"version":"dea4c00820d4fac5e530d4842aed2fb20d6744d75a674b95502cbd433f88bcb0","affectsGlobalScope":true},"a5fe4cc622c3bf8e09ababde5f4096ceac53163eefcd95e9cd53f062ff9bb67a","45b1053e691c5af9bfe85060a3e1542835f8d84a7e6e2e77ca305251eda0cb3c","0f05c06ff6196958d76b865ae17245b52d8fe01773626ac3c43214a2458ea7b7",{"version":"0d832a0650a74aafc276cb3f7bb26bde2e2270a6f87e6c871a64122e9203079b","affectsGlobalScope":true},{"version":"c6f3869f12bb5c3bb8ecd0b050ea20342b89b944eae18d313cde6b0ccc0925d7","affectsGlobalScope":true},"8abd0566d2854c4bd1c5e48e05df5c74927187f1541e6770001d9637ac41542e","d742ed2db6d5425b3b6ac5fb1f2e4b1ed2ae74fbeee8d0030d852121a4b05d2f","d8dba11dc34d50cb4202de5effa9a1b296d7a2f4a029eec871f894bddfb6430d","8b71dd18e7e63b6f991b511a201fad7c3bf8d1e0dd98acb5e3d844f335a73634","01d8e1419c84affad359cc240b2b551fb9812b450b4d3d456b64cda8102d4f60","458b216959c231df388a5de9dcbcafd4b4ca563bc3784d706d0455467d7d4942","269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","f8c87b19eae111f8720b0345ab301af8d81add39621b63614dfc2d15fd6f140a","831c22d257717bf2cbb03afe9c4bcffc5ccb8a2074344d4238bf16d3a857bb12",{"version":"2225100373ca3d63bcc7f206e1177152d2e2161285a0bd83c8374db1503a0d1f","affectsGlobalScope":true},{"version":"7052b7b0c3829df3b4985bab2fd74531074b4835d5a7b263b75c82f0916ad62f","affectsGlobalScope":true},"aa34c3aa493d1c699601027c441b9664547c3024f9dbab1639df7701d63d18fa","eefcdf86cefff36e5d87de36a3638ab5f7d16c2b68932be4a72c14bb924e43c1","7c651f8dce91a927ab62925e73f190763574c46098f2b11fb8ddc1b147a6709a","7440ab60f4cb031812940cc38166b8bb6fbf2540cfe599f87c41c08011f0c1df",{"version":"4d0405568cf6e0ff36a4861c4a77e641366feaefa751600b0a4d12a5e8f730a8","affectsGlobalScope":true},{"version":"0ed13c80faeb2b7160bffb4926ff299c468e67a37a645b3ae0917ba0db633c1b","affectsGlobalScope":true},"e393915d3dc385e69c0e2390739c87b2d296a610662eb0b1cb85224e55992250","79bad8541d5779c85e82a9fb119c1fe06af77a71cc40f869d62ad379473d4b75","4a34b074b11c3597fb2ff890bc8f1484375b3b80793ab01f974534808d5777c7",{"version":"629d20681ca284d9e38c0a019f647108f5fe02f9c59ac164d56f5694fc3faf4d","affectsGlobalScope":true},"e7dbf5716d76846c7522e910896c5747b6df1abd538fee8f5291bdc843461795",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"b510d0a18e3db42ac9765d26711083ec1e8b4e21caaca6dc4d25ae6e8623f447","8cc3938ee48298303fe4e97cf6d37e673f5ef328b4399f1f07e799f49288fe2f","8ed569ceee71183d76f430860754926886ba6d2e84ef817a7a40afb85bbcc373","3c0befa6b19c9b71ef0eede9c5a4f189d869363c9ce16a1bedc43029da80b10c","a11fa79b804b6e387126bada8286a400b2a2dcd4df496e5b8efa2d93186adad0","230eb449f719119cab1728252f20ecdd36d7a20cef659e4a51ada1a232a8aaad","85786f052b5dcd0b36564b657a9aea3e80f1fd0e76e4606a4400ec21928892c1","d9ee6bcbf3231a4446de6241fe71967f73d6ae7e7279c5540ee52e1dea4d3114","1bf687d978bdd6d5aff10b9eb0ff0695179f8594d4446946fd0182d6d25fa433","337b83946e5ee461ba8bca2f5e5a6cfdef8e5bb13d20614aeca6f58d6b1a8fc5","f5337c3ea7b8702ffe2718f56a24325a67d517c0d552ef71b8d578d9f33a99d3","7f2cc72a16a663ab9f8d99bd5658e583251ce0c003bf80a948973e15a7ef9596","fb0747c05bf570dbc947b28b51bd26f8a70406084bd7d2a55943004e6bb714e3","c5e9e765e4b8b67155c33afcc09213bb371ddfdfa17e3af18558831d3f0ab000","55e5a976b594dc02f054860fb59a5299872a5b3c8c90e96733a5c9c9d4ed1fb8","fac83d4c6898d5bf90c508cc84409ded40fdc14611cf42d7fb750fb2c7847979","03e385ae2125c9aa9dead008b42a0ab20d0812c26c19ee210d84c2666113f867","cdebdc5861de7a07ddfbd6740a7ad3415068522e19a82bc652ae313c76e4f83d","1d58c629ad80ffc8b5c64d899c33d11e4ee02c8f167781065b89fd1c1f0d6363","33e9ff9d57e93f09c4a5db6da29b09aa6b612678902c05eb3931dbd3c9b43c86",{"version":"01fa05b0061ea6f84c4cc95d88f718b66da773bbf29e8ca06ee194843ad21d62","signature":"22885cbe4178658a1fee62b22429b37f4f7ea89e80b3fc64524a016d96dadd89"},{"version":"2dec630463aaa98bfbc039a798f1757b9d53fd8ebd1722817b05b4534133d8cb","signature":"1cc2659564153cef042b6a377a36a04d861398d678e7032ec42698d8c80ec77f"},{"version":"04c0845e6238ad637b36f880c649580adb0c243f3fa45f4c3807430c8e862933","signature":"da7f4b98c4488238be67d8ddcd4216a17d3d18d96e1d768a8e4fececb1e50c1c"},{"version":"fab3d2f53aff06b666488c99ae8e71334116d7dbe64573e46ce153a535f2112e","signature":"a6918a0b864856bc05c815ce30886c9e50255ccf82f6c7b2977e153c4e8956f5"},"f30cfcfff28ee8f87563225b47239bb07b9b11edd09dda0ea6499b18cca1a30e","0edb8a97ead1fefd337458449050857e80740e31a3f76cffa656262f4e651a50","db8e4b47dd8c22634e3a326e5a5f60aa71a8ad4a0458fc0aadb6951f1c7cdc54","5b7a6d3f5c1b1d94d6cbc6c1e113588e20ae61d583d0d0cb5ec3fd92926d3749",{"version":"57b66a49fde8cfb80495147e1e115f4d09e7d089a97bca210d7b737a9a3dfd40","signature":"7c86832b33e8881089597745da92dc33a29681874849008a13069039bd613ea6"},{"version":"36ca0d441bdf15b8986ad2eb72174ce67226439255956e1edf2fcfabd09bd6df","signature":"8729d2e8372b2d7ae304c08254a34561de5cbe133c02a21dfb7de7db2d8813e4"},"f9e46527ef7833f803a47c256179c05e5149a8dc776c5a6952572052c9e00b24","557b8c7481296f4b7ed362320f3bbb40bb87404edf880c81224f365a8d1e17f3","467a7c09abfde00a7fc41d06c1c599f01e944c9f4948d38a0bde82b766a7e364","7697d44896d7082a0195b088b1a5c49bb70aea87721448982bee34720cfa73f4","77c738b0671d324f6cb2c7c1d7dfc0282a5836c67af55c9ba6df315c62207f57","f2dc47a6b115cd100153d2aaa3dbec094e7a55c5e471c9df8cf7fd651925d63f","2d57b5c1d1ef4cf78480539c0e0650af78ccf387d95f0585b12dbd658691a30f","93a7c98b43d63dc627ddbe2d04499a3e38ef6f243df7fc6505bdb54b9c7fe98a","7a6f74294b8fb90f5e3832be21e25898dd81b2a1adc36dda6929813ba4135311","d25e693302c8e284b417884b40dbadffe693b0daff8999a000995114dbf74c49","a1d4ac1b15cd62c7346d976e3a01e6cbcd4f166ea6b7866907d25c5acc832d77","5d40e6a7071d0d1e6e558e17214ff786ecb3ea73e31b25a88c2cbe2435fa1252","c45242078469b9680653d6a0667b23b1b767ec908825a14bfa8bb1dde2e30dae","91774d65e6f34e378ae8806362efe557a32cd904479f69e29f61102d8baa0c9b","4831b95582d9650a370be00e1893a2cfaa9083f78884c001347e8f85281bd830","2b84036323d8ee148857ecd9a03db53d6183c7bf1511899fc7aec68ad0c1f69b","247152c89cc84294cffacfac67ab3178bb05a8e440e6eff774848c56f35f5680","61aecaffa270848d50da8222593fc396b31ba3b608608f44816b1d30ff105585","88de5467cd5e4c2c1384629806d56ac1215657bddf39ef9f60a0e05beee2b131","ff5820394809bfc32a7e4586ff11b3c07327a0f4c756709aef92f1cd73d6da48","bfe2af20f3ff0579331661ef4c5d2597e0c31a7a0d760e41eaff0502bf064c4d","f52a0e53f79d7fd1c1c55a3cbda59499d4cce75f3188969024cdc286b29ad3ea","e2dd36a524ea5b13de1ed104ede9cea79696588175c1df1940d6a29113a4aee0","ac63a01fcac70315fc9b416e9a57e568b18032c7cfcaa314e1751f03ef71286f",{"version":"2364c07d4efd8f014454d306756e2569f129b915fcddc43a1dd2b4f303426d2f","signature":"479f57a4498698c0ba6a05d1177ae10167c4eb39e7b4f8f7df71893256a44364"},"0eff9792dd66a9aef708b34dd51d2e46158ae518db6ab14f54c5a99e8551abe7","66336b5a5d5e897e932cbf1e306ff8ac8a9929971409a8049c8c8a249cd8b57c","a878d4c7237a7af50e96534295fcf723134d70cbb1e9bfd8365266b912aee6ec","1185e162cb22a9bc3e94b2ae2ba35ed943ee69beae5364b38680f7d8587e7d35","b0e45bb147d111025fccf490ec1a7f58d84c3ae9f58a61313b1010df95e4eeac","4de66b5983d6286bfe3606cf155a5b21043111389d0b4c7b23d3f4282099f7d4","3968eed4d327e075c2386fad0b39b5ad2fe1892f6409a3bb46660c46f58300a6","b1129d7c114eba7c7b155dc809d6371ef86a0738f7ca93b3efef9b796d6168d9","56558ae167446acf230ea2cc072a835309a37ae63d286b484308afd8c504c2d6","ffff3307a2c3797cdc04d7493e94245c13a646194c87f5bf5d2432995b834cc3","a87bc62d9a6be405f53f883a422efd557775224cd2b6688440cd333aaac27169","3d08777d7a3f5c1899a21dc2bd9f0ca80cfe0badba576cae22f5b47b7f81b3eb","bbbfe3163d9421b837e4e203c24243344be38e4359b6fc15426943454d8949b6","8cf4dc652e929c4de69ce5079b98a0683757b2dde66a7cee93edcb5aa08d5c48","f74d877f1fc949fb61197bf32a41829a83ee6aea528787dc2788378baaaa0ecf","a62a02c433e6fee26404825310ad462433320ef2e9f80fa7b9156135fd975f8f","22f15ae5c80b3e795da92636aa03d8f981811d067d82bff01ca54093c0535ec0","b56d4bc83ec01834829979ad57de59b4947cd62f71b102ab0040b6960d5bdc81","a10213415bf98670b026b77a90c7933594f0b5c34bde5b74e80134fdf0331bba","00cd454fa42dca69cdea08d4cb9698e679ba9a31762c23d905e45ba92269ac3a","58765e8e715155b2940e868ab1534b1bfac7087f6b42f7810ef94cc077d62981","f1c4e4db3e1dd83c3749f174e662de845e1217017ead0c15074e3ba00db67b6e","5aaea3d4b3af0c8339006c30af04eafdeb21b0a1bba2f1d32540ade412ee80a7","eb72bbe04857681ebd08a48d3b0869969c335445c31de53a85f76b4a42b97c92","c8cc38cbba80bfd5719c1b9d7efcd76fc90d4497e8a9aa715db426993274f0ae","49b6ff487f2d72569e361f077397214fea20839712527f5fb9ed8bb877dd7db8","d3043c37eeeb10d8a5c0c2a3b9d72e23a5fed2e9a367c5b4154bc8d9283601f3","58ff317d61b47e8fc6688bd50e6770311691202553f119d1e1d79b64d864e200","cde49e6e1ab8a2b4202958e3267e898489b737198a0599c7d251f94d9dea658b","3c3ca314a2b01902ef19b499be6e052925a849f14e2d9185afb323df3d3a72b6","b4b4af7820e7888cf67beeb95d0d6144b3d854370a7b78a598e80dc268e74249","1e7146a407bf85762b80681cd4aa3b544000e30c9b24d04685dfa69f82a48fd9","a3c42863fed9b49c35144d60aa0b2865b5fede65ea0050a28f45381af6dae035",{"version":"0d3eab3df87bf09cba3e05626802e7ca3a41f7d3f7eb6511c638bafd5c52565c","signature":"8db42cde9161c917ae86f075cb21c16d1fab5965db0c4f4b372b4e7a0276f82e"},{"version":"917b6a0feb5eca283fe3a2026c882c836671108d7bc7cdb301b758a9cd761214","signature":"a03bc49af672574771ede656f9c35be60c2ba44f45655aed449e7f9e5efae6aa"},{"version":"2f338ffa300ffbdc665dec11e4f0cb52547a3f76023cfd8795e7a7b839cc141b","signature":"24fbfffb2521234cd9c18aec2f452b3005f53594aebf72e3a59f0264af1e8929"},{"version":"80ec24c6f0a0774c14f6bb39357a99e203067cb93b84dc3c81976c087cd0e517","signature":"6d5444dd0cb480aa3ea38724d56fce8042b24f35007862be9a3b266ad61fa899"},{"version":"0531a56b4ac6ad3acd28825ede91ff07f4d282c9dd506b4dcdfa46f30e815246","signature":"0abfab39cca2b786d14a621a308538c88dbdba07093283eec1bc6daafc462b3f"},{"version":"d6f180feff7dd524906f076a193b38e006dca07df372cc618905cb8d743b87e1","signature":"f9358258c9ea51d0ad06359665000ede16213ba61c4c77f2d95342eff2914bd3"},{"version":"550b20b25c683729a6f70364b7adb4c58fdfdb0d2b9497a783b084213f61f112","signature":"0f2e27101f71a67dfc93ae737c2dc191b7a7966f7ff18ab49168db181e827d4b"},{"version":"8eb9893ae65f4125c00e6c7c20fb2d629cd45b5392f922c38f1567ba11f4efb8","signature":"b48a6177500ae78755c5787d25a9bf3a3f5553ab519d3654a4a63e127b3b956b"},{"version":"40eb173f4f47d739fc1100db964bcc4c679e896caa83ed5d9ace4ec9528e8c78","signature":"b73dc3c92a3cdfe4144eafad3b73c13787c5cffe4ec5b35cd0467e9a3ede9ec1"},{"version":"a1f3769823c3ce1635c219e0a1b921ddca2845f0fa3190dbce85367a1e99e3ff","signature":"97dfd5d7c0673332fe1548f3b6a112f73571876bbcc0e680f7fc789116b4cea3"},{"version":"f3432e6034a68deae626c1355afbd21fce7d34f07df848c551e2f41f5112c0cb","signature":"18d13ed53b7fc0ccb1f5eefa0f9b3189a9e99339b8a6e27dd542ea6362b0c480"},{"version":"5fe8e2b0c3679a8e6ef41eb84d1ce213cb51d7f68ad2c26ab97801ec28f96183","signature":"3f861c6d92e10f7d80eb0a0a5632d7438d1c0a70006b3b172041fbd5cb9349af"},"5bca2169d85cde638dc45542bb3674c42e5a0eea70ac2737cb48848a0c9e10b4","57dcbdb5305bca37ada1a2e63de06ecec575ccabfb72e7d477a1e315cf6dc0c6","4f3479613b71df319c7bccd0dcfed21a733af3b15f09a6bd2c6898b95f189433",{"version":"2c1344e65cb8fb4df3188a16ef6c25765fc3f7ca79d9647f58d737bc2f5949bf","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"4a2c144ea6f441e9616ec77fe9b1009b0cdf6db0cd9727b8d99623975cd6c693","affectsGlobalScope":true},{"version":"86e56d97b13ef0a58bc9c59aee782ae7d47d63802b5b32129ec5e5d62c20dbfa","affectsGlobalScope":true},{"version":"c1f79c6d85cd84518fd7349588b3c61bdc189f58e3866f925cbf4631c81e31f9","affectsGlobalScope":true},{"version":"54db406753da16e177f094aa66da79840f447de6d87ddd1543a80c9418c52545","affectsGlobalScope":true},{"version":"42f28f4cfca4a70bd89c1d55d76c7978275030b894f6793f36890265c11a83a4","affectsGlobalScope":true},{"version":"7cf1027da9599f056355b46bbea31dbf7f715f797dffb9cbb3402d4490c503e5","affectsGlobalScope":true},"96dbd0787b57ae02981d26d5f2441f0f8444fb46d7578c56527eab89cff13a7d","7d2a0ba1297be385a89b5515b88cd31b4a1eeef5236f710166dc1b36b1741e1b","db0d9343e7723002290ea188ef47650dca80bb651986882220110bb1576f46a2","e1712267198fc3dd7903d0b945d5049fd56d68cadaf986c0adc40235fee43488","3b0253c238cf880be78a88fec2065eb4e3cb7ee1a0d0b02f88bb9468c0c2bf8a","81c6dd936bf342efbb1b1a5440a4300db5d39d70a6ad49ebc91ca7033ae9ce79",{"version":"13acb84a8fa8264d596433ae541c83b13d226a9592e6a26b165002c38132b97a","signature":"e307a4efa11c7f907b4e98ebb9496837e1901f13a19d8b0ed8c51205b09d528f"},{"version":"ac008e94a714c7d53ee34246b03f55c49348c47ae39ce18292c307097bc9710b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"8211eeec7cb8f7b3605df9b4fec52960d4b6f9bce9435ce50e7fd94f143640d4","1633b84fd3346ad6500a88e7a119ac778bb6f6b2746a3b7b8164c5ef2721822f","9546c5c0ab2112ed33b72af30058a5f21e2f3ca00d650b666e20544db57bc10c","47fbed5e984278b46c60b87df76e63d4ea31bf80f29d49cbfb5cd140dd8e0a6e","ccc50fd3a6eecf62f9561be9a02915e1fde20e16457bb5776e34653e12d16b92","4d00cb0cbfca5ad8ceaee993887e618bada234de55a9bbc2adc33192ae57f4c4","be8d072f400254824429edab10acbe595299b702c97b99cc47f8e8018b7102ff","1a319786bea64c944ba8dd33331090034468efbab9c2fb96552850033d62d8d8","3b0253c238cf880be78a88fec2065eb4e3cb7ee1a0d0b02f88bb9468c0c2bf8a","2cd3b80c4762701c0faffcfaa6f9ba62ab7142260eb2de1b9d1c16f79279fe98","33174450482b921bbf093e3d52f501f7f93b5fd612311aa86e7339f2800162aa","b1ed4d62618cc9cee9a264ce3b70421d42219e6451f6a79d4f11019610681109","2cd3b80c4762701c0faffcfaa6f9ba62ab7142260eb2de1b9d1c16f79279fe98","d8b1ae2f0f761c8ce3cb48b8b7c784de8c1ee0eed942be1e895116be031c246d","e1712267198fc3dd7903d0b945d5049fd56d68cadaf986c0adc40235fee43488","3b0253c238cf880be78a88fec2065eb4e3cb7ee1a0d0b02f88bb9468c0c2bf8a","86c8c1efb4a8dc35b6270afbea0699e7d2b593ce4f3d68c3d113366e0dbbe7b5","8ed569ceee71183d76f430860754926886ba6d2e84ef817a7a40afb85bbcc373","650d178c1248e84c587db73065745a62139a3bc6c209a92864f937d08a7ebf34","a11fa79b804b6e387126bada8286a400b2a2dcd4df496e5b8efa2d93186adad0","4b390c96252610ad4f8b618206794b68ddb26ba12a9ef7bc4bbd7a91f7eba079","85786f052b5dcd0b36564b657a9aea3e80f1fd0e76e4606a4400ec21928892c1","903812fa2dee0229a8719dcf99f78864c4982094e543f550835ad4418f32412b","010d5afec4b47ea596f6c59a25ce628fa4e31ea15fd51e73d44ca2d72a780be8","6688472a235825a83c602e9fb0b24f148783314a1c51f2539fcb024bed667967","5558e4604734e02b341074c8ceb8b9cc9cd384927d0afdf611151979674aa50d","c654f65182914e9c6fccea238077f6cfc5619983540f760e72c4fae994ba8a0b","03e385ae2125c9aa9dead008b42a0ab20d0812c26c19ee210d84c2666113f867","fbacab2238e299ccf6596c3bd404c7dcad2c5a88ecd254a8a38cf2d184a67c75","688c9dfd2b7114f5f01022abb5b179659f990d5af5924f185c2644ca99fe7b77","932cade1c5802123b5831f332ad8a6297f0f7d14d0ee04f5a774408f393e2200","925a8770415572378b7b62dcd714e744b7ffed86de59bdbe1d25c68d9d1f7f51","38fc2c990835686053591402bd73803ef28e117fa49427763e62636fd16c76ad","85489033e86eba49bfef2ad7330f8bb57cf7ef6aeb341c00ae1a3e5b19a02f4f","d4936633d5453e441ad5ab182efad46a0e1285fe5f9f5c2948cad3e71b7c2c23","a1b60bd2328318dcbec30bdf529dad31a13315ff2df60c8bd71630c58a575b06","e7ad5aa8eb177708949df3abbfe5ccbe7b75c920fb3bdd89426c38c61f239da6","8cc6a35806cd10d448b0f2ab01fe0b6194ca57fdaced2d71781b68e83c55bd88","8f364fec0ef20506aa9cf00b5cd8b620c1c0389687b11a3a32b0b5d4716ad894","5d11703e2c5d4dbe00bbe79f3bc864d178cf8d6ebccc2d1448ea29e93654f029","f4e82c91aac3b61f3ad04f11a44c5b79f724ff8a09281d0afa24a6624633ff25","ed849d616865076f44a41c87f27698f7cdf230290c44bafc71d7c2bc6919b202","7b8b9017156ef8bf3bbe42785fac8956e5c9869f4a494536d7f548a7c1c7d98a","eb2f08ae9c540a5fb60a5edddc0860ca3dad54ec842301ca73441d9e54534af0","763bb8df872cbb8783e29e19bd7a1dea0f88f7fd7398343af38be8509a65df82","687ce021a76c91c0e0b08fa5b828de2916e1b1aa9a23394e8ebc4dd96b8ee776","c286b410193495d067668bcdbd13ea3f3a39001edff02edee248babf2652e563","ba1405da509cc84896a588978efc45400d4f9844ee738d750b59868b1ad1618a","5558e4604734e02b341074c8ceb8b9cc9cd384927d0afdf611151979674aa50d","c654f65182914e9c6fccea238077f6cfc5619983540f760e72c4fae994ba8a0b","3b0253c238cf880be78a88fec2065eb4e3cb7ee1a0d0b02f88bb9468c0c2bf8a","83a1426ac1a9cf144141dfe10d71a68629623a7c28245c9ca0e0352bead501fd","2726c0a6a4a87fad11e6846e6b0b40b8924fbe66340adc512093c4273bc53e4e","c888daaa99fdf6c5712d98605fdcf21cbbaab756a629661a44cac44ede464d37","e044f60686dc70015a3b7e7c64ad0ac5ec5ec101a0aede0782ec077e136b6a65","a232f867897bbecfebf68df575a417af1afd9b5dd3d83fb4d59e0a133a0de93d","903812fa2dee0229a8719dcf99f78864c4982094e543f550835ad4418f32412b","228dbc8825b7a45af7d416dee95c0a2162d7cf73ffddfd52357b7e548882bdaa","602baeb62ccf84672ba7afacb5a21b675171282397513cac8f06d3a8634f840c","5558e4604734e02b341074c8ceb8b9cc9cd384927d0afdf611151979674aa50d","c654f65182914e9c6fccea238077f6cfc5619983540f760e72c4fae994ba8a0b","3b0253c238cf880be78a88fec2065eb4e3cb7ee1a0d0b02f88bb9468c0c2bf8a","4b390c96252610ad4f8b618206794b68ddb26ba12a9ef7bc4bbd7a91f7eba079","8970ab047d89c71edf9973609dd62f61bb366abeabbff36a1200103b6c1c605b","89dd83418d3c93418929123f21a02434537b5c79ede3c0c6ab5a495d602db155","11705a4aad6e2e724b82ffee6c4fa271d798f0fb68806ace4b1c425c266f8d98","93597e08900c3ac5ec730c16c4fbe425f7342e1f0420967b2afd90d67a2abee1","5558e4604734e02b341074c8ceb8b9cc9cd384927d0afdf611151979674aa50d","b1ed4d62618cc9cee9a264ce3b70421d42219e6451f6a79d4f11019610681109","8ed569ceee71183d76f430860754926886ba6d2e84ef817a7a40afb85bbcc373","2cd3b80c4762701c0faffcfaa6f9ba62ab7142260eb2de1b9d1c16f79279fe98","a11fa79b804b6e387126bada8286a400b2a2dcd4df496e5b8efa2d93186adad0","af89ab13b40dd28cd91818fc6329914d2b9663591831f032ff0f0cb4a028d4a5","6e6733927ade923e34b243d6fbec1465cfc8ed6edf62c6e09ed00c529f0d93de","83b3a9e85f7967509436fcdfa9be9bd543fb54003a9233c5c0af087e4a2c11c8","dc92d6eccf12395aa1d47afb765d5e4a1cd2639a385db0e3e88e9937ad2b63a3","ffb6e0556a4b5323c8bdf12727d000e8a3633f0552fffc4b779ae88546be2770","1242141c87ba3396bead6f379f6d6778bd38d02017f243aa448d1454a5fdc90e","17a4105ddae0308e19ee8532bdeb76278efa9dc644366060ca644541d3fd831c","913ffa031f7455c53e99c75ae130a046612d2ee0e716ed92707e996cbd3952ea","44e897d02326bf4d8169ea9638fe0a4c53b8f85cc48ae2fcbbb67b2f72c1d805","288fb1b9df77067c3c2675bde87d23d4a3f01bb6f929f854f11bdb68662968ff","b43b5156bc2831b46f6226777e292ff1646b3651ce190708b6228a078d42da4a","509c8c515a10704ee72220636b9a2afdd19f254978e23bde45edecbf14c62bc5","3568f0c94a6b9d56ac65cdaae2dc0d6540cdac5609f36fc29a76afee4c8fd775","7153912aee74dbd20f46243e78fa37d014ba38ac7b3458709fa74b6ac0e96fcf","32cbe201bfe8ed7f4c323fb8a3fcfdfb451f22e84d3c49da33ceda2fbf9230be","50d536e2e8bdbb4234b6ade05992aa4227fbf0401aba24922734c3ddb4a3ff11","626c33bed7b1e4df8b77660be5853c9e0abecdf3fadbc170368255f0b9fe65cc","007a764c97d225fd6bf04637aead6879ffe2a9bef665ffda9a7fcef1130a8648","99c24f331c9f4e75a779b9a988e942442db3cf29923ceb820d3bdd4ed1edfef2","822608b61e6599d53757f1e39fa99897261d62ee5daa02e9059bd104b12a790a","8cc3938ee48298303fe4e97cf6d37e673f5ef328b4399f1f07e799f49288fe2f","8ed569ceee71183d76f430860754926886ba6d2e84ef817a7a40afb85bbcc373","3c0befa6b19c9b71ef0eede9c5a4f189d869363c9ce16a1bedc43029da80b10c","a11fa79b804b6e387126bada8286a400b2a2dcd4df496e5b8efa2d93186adad0","230eb449f719119cab1728252f20ecdd36d7a20cef659e4a51ada1a232a8aaad","85786f052b5dcd0b36564b657a9aea3e80f1fd0e76e4606a4400ec21928892c1","d9ee6bcbf3231a4446de6241fe71967f73d6ae7e7279c5540ee52e1dea4d3114","1bf687d978bdd6d5aff10b9eb0ff0695179f8594d4446946fd0182d6d25fa433","337b83946e5ee461ba8bca2f5e5a6cfdef8e5bb13d20614aeca6f58d6b1a8fc5","f5337c3ea7b8702ffe2718f56a24325a67d517c0d552ef71b8d578d9f33a99d3","7f2cc72a16a663ab9f8d99bd5658e583251ce0c003bf80a948973e15a7ef9596","fb0747c05bf570dbc947b28b51bd26f8a70406084bd7d2a55943004e6bb714e3","c5e9e765e4b8b67155c33afcc09213bb371ddfdfa17e3af18558831d3f0ab000","55e5a976b594dc02f054860fb59a5299872a5b3c8c90e96733a5c9c9d4ed1fb8","03e385ae2125c9aa9dead008b42a0ab20d0812c26c19ee210d84c2666113f867","cdebdc5861de7a07ddfbd6740a7ad3415068522e19a82bc652ae313c76e4f83d","1d58c629ad80ffc8b5c64d899c33d11e4ee02c8f167781065b89fd1c1f0d6363","33e9ff9d57e93f09c4a5db6da29b09aa6b612678902c05eb3931dbd3c9b43c86","af89ab13b40dd28cd91818fc6329914d2b9663591831f032ff0f0cb4a028d4a5","872c16fa4b9e4f65351129c31748eb5b0c2ecf4e21f31c5191b0d88a4247c392","8aabd3f6612df92a210227e6cad3797bf8786cdedc7255c6eeac551c5f334a86","47761b52895d263dc6da72ce4b8f85f088c2659fff9e2fbad992d47f767d38e6","733b7f04fe4048b4b6192f7c7c0c51500930c8a1adf2bb549952a38f6713bd55","c97bd188967aec440612a54af4dd6289134f1d96bc8d5ca7463603c010f3719d","ef6e6d838cc600162626a53167046484f38e9a4bab9454e72350bed76c497228","8adf9a02b0c2508f81516b561a6c8080ea2169126f166e39767bcb5389b9cfbc","e9c4245bbf5a7d7773b8ec2c3cda931333cdd1a1cfcb67e3165160c1a14d7d68","643dcc834b6d8e8f6929de74c6afc11739d19afbcd53a75b3d79d401d885f334","447d3c90ddd4ca1a84c357682ee533766720dcef1e040c720d266afa64b223d7","1c65a7a7dfdc8a54b4417445c8364760377353f751023d87be5f08d02b7b3a60","1cd40e2f37323f632ea66c527ff7716f63d995f93ed0d2f92249200c223affd4","5a1ffbe813678cd26a88d802d317005bc8f39aef35d822aeb80572773a9171d4","27679e96d1bd38c5938178aaf4abe8627493090b63d6bae2ce8436e6a87ebe4d","a77fbecee25688f568e18b43f8f54195d6c278a2a9a687ada5ab3d2f726524eb","e29f2b3a93ca3392fe29fa8e7b93985e854b44fe28e2b5c113f08296095bd6b7","d27956c8b392088a06d882e1edb58aab4d5cf5ab1229b73f99329ab21f352147","d643518d0b08b3d8d6e7f1fa884bca57ef95caaa1c312abbd9e1d4ed0d51c370","0c0b5cff24ebe9d0f7dc9a348dd9dbb76092efd8bf2fd391b6bbcbc6b6293564","b44b5f8ef73256034392f4d16fc3b43cf88df9d5845ecce49a6cd978b775a767","c29cf47a3bf95c8e569e374d684177b3cfde5725362d732de97c7d5959a746f4","33e9ff9d57e93f09c4a5db6da29b09aa6b612678902c05eb3931dbd3c9b43c86","cbe00d8364e32d303295626453f095d09e8ff700281c582922bf32e1def473ee","be53c9014386b636953e20860482b6aa7705620899ab2e1f1683bfa580ab3bad","acd5d501223e3a7cdd229b501fce5fb071937b72bd05fa33e543eb21c8ee0aba",{"version":"4de1a7fb21a284ac1c5d6c338b72de5dcc5bbac750ec7c881d24ace669a55c7b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"6e0011406961ab3d469f2a7c3fddc41a5c9fb6d9452c47b5389124da846ab07a","eb0496ba7f7223a95a7ec44618cb789c49a521bdf9372506c2ae48e5adb71035","a4f27ea63e3ff26a94b6681967a5276a2df9ddb80ae990df1ad03c0fffb34eca","18418f70457cee30da01c21bc26869ceb1ae65564784136f7fe2f7f2ff8f740f","3d2ec84143e6462a786b5d9ecf06f4f6f67a59a1f16c5a3a5e41721ba8478b7f","892f412f701d356f85cd3cb7d48b87ffecc0d4f85a2005c1d53e5e08414df8b1",{"version":"14261c0d2da587df791a696c8272003a3c5c1d7dd3a91f459092a8ab99759ca3","signature":"23d9dffba690dd7b1cc3986e0d592011a8660f0cb7632037b83b157b659c1510"},{"version":"07f1ae9181990dd05d21d95900f7bbe636644aa5db131546dd89da5b5050d149","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e2230438fe21ba6ccd9012bf36ea2e90955303f3208f9706f7847e3e1a8876c0","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"236a4fedeca1fd5adeea1f56e17463fb0b800de94be040ae7fcc44fe3533349f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"42baf4ca38c38deaf411ea73f37bc39ff56c6e5c761a968b64ac1b25c92b5cd8","d7dbe0ad36bdca8a6ecf143422a48e72cc8927bab7b23a1a2485c2f78a7022c6","8718fa41d7cf4aa91de4e8f164c90f88e0bf343aa92a1b9b725a9c675c64e16b","f992cd6cc0bcbaa4e6c810468c90f2d8595f8c6c3cf050c806397d3de8585562","68cc8d6fcc2f270d7108f02f3ebc59480a54615be3e09a47e14527f349e9d53e","3eb11dbf3489064a47a2e1cf9d261b1f100ef0b3b50ffca6c44dd99d6dd81ac1","035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","fec943fdb3275eb6e006b35e04a8e2e99e9adf3f4b969ddf15315ac7575a93e4","d58289beaadf0380170b0063569e1a01c60ee6b8f2dc3cccfff4fd965154d555","f313731860257325f13351575f381fef333d4dfe30daf5a2e72f894208feea08","951b37f7d86f6012f09e6b35f1de57c69d75f16908cb0adaa56b93675ea0b853","a45efe8e9134ef64a5e3825944bc16fffaf130b82943844523d7a7f7c1fd91b2","969aa6509a994f4f3b09b99d5d29484d8d52a2522e133ef9b4e54af9a3e9feaf","f1ceb4cbff7fc122b13f8a43e4d60e279a174c93420b2d2f76a6c8ce87934d7f","0f9e381eecc5860f693c31fe463b3ca20a64ca9b8db0cf6208cd4a053f064809","95902d5561c6aac5dfc40568a12b0aca324037749dcd32a81f23423bfde69bab","5dfb2aca4136abdc5a2740f14be8134a6e6b66fd53470bb2e954e40f8abfaf3e","577463167dd69bd81f76697dfc3f7b22b77a6152f60a602a9218e52e3183ad67","b8396e9024d554b611cbe31a024b176ba7116063d19354b5a02dccd8f0118989","4b28e1c5bf88d891e07a1403358b81a51b3ba2eae1ffada51cca7476b5ac6407","7150ad575d28bf98fae321a1c0f10ad17b127927811f488ded6ff1d88d4244e5","8b155c4757d197969553de3762c8d23d5866710301de41e1b66b97c9ed867003","93733466609dd8bf72eace502a24ca7574bd073d934216e628f1b615c8d3cb3c","45e9228761aabcadb79c82fb3008523db334491525bdb8e74e0f26eaf7a4f7f4","aeacac2778c9821512b6b889da79ac31606a863610c8f28da1e483579627bf90","569fdb354062fc098a6a3ba93a029edf22d6fe480cf72b231b3c07832b2e7c97","bf9876e62fb7f4237deafab8c7444770ef6e82b4cad2d5dc768664ff340feeb2","6cf60e76d37faf0fbc2f80a873eab0fd545f6b1bf300e7f0823f956ddb3083e9","6adaa6103086f931e3eee20f0987e86e8879e9d13aa6bd6075ccfc58b9c5681c","ee0af0f2b8d3b4d0baf669f2ff6fcef4a8816a473c894cc7c905029f7505fed0","89121c1bf2990f5219bfd802a3e7fc557de447c62058d6af68d6b6348d64499a","1af1f2c02132bafa25c4c4b7c415e0a59ba959d6db6bd1800a43fb5d943e3f77","8841e2aa774b89bd23302dede20663306dc1b9902431ac64b24be8b8d0e3f649","fbca5ffaebf282ec3cdac47b0d1d4a138a8b0bb32105251a38acb235087d3318",{"version":"0ea93d01083b3d5863cc98cb589b5d0eac55d14417487f9e5e455dfa0b17c660","affectsGlobalScope":true},"22293bd6fa12747929f8dfca3ec1684a3fe08638aa18023dd286ab337e88a592","916be7d770b0ae0406be9486ac12eb9825f21514961dd050594c4b250617d5a8","510616459e6edd01acbce333fb256e06bdffdad43ca233a9090164bf8bb83912","5b5337f28573ffdbc95c3653c4a7961d0f02fdf4788888253bf74a3b5a05443e","9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","85f8ebd7f245e8bf29da270e8b53dcdd17528826ffd27176c5fc7e426213ef5a","4006c872e38a2c4e09c593bc0cdd32b7b4f5c4843910bea0def631c483fff6c5","ab6aa3a65d473871ee093e3b7b71ed0f9c69e07d1d4295f45c9efd91a771241d","bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","5d30d04a14ed8527ac5d654dc345a4db11b593334c11a65efb6e4facc5484a0e","74d5a87c3616cd5d8691059d531504403aa857e09cbaecb1c64dfb9ace0db185"],"root":[61,63,73,[193,196],201,202,227,[261,272],276,289,290,427,[434,437]],"options":{"allowJs":true,"checkJs":true,"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":false,"esModuleInterop":true,"module":7,"noEmitOnError":true,"noFallthroughCasesInSwitch":true,"noImplicitReturns":false,"noUnusedLocals":true,"noUnusedParameters":false,"outDir":"./","removeComments":false,"skipLibCheck":true,"sourceMap":true,"strict":true,"stripInternal":true,"target":9},"fileIdsList":[[166,237],[166,237,238],[166,238,239,240,241],[166,238],[166],[166,243,245],[166,244],[166,287,302,310,318,319,322,323,324,325,327,335,336,337,338,346,348],[166,322,324],[166,321,322],[166,320],[166,318,322,324,326],[166,328,330],[166,326,328,334],[166,332],[166,324,327,328,329,330,331,333],[166,324],[62,166,317],[166,324,327],[82,166,286,287,318,322],[62,82,83,166,287,316],[78,166,300,316],[136,166,173],[82,166,287,300,302,304,307,308,309,310,311,312,313,315,317],[74,166,286,287],[166,317],[76,78,166],[82,166,287],[166,287,300,316],[62,166,188,287,302,317],[62,83,166,316,317],[166,287,317],[82,166,302,314,316,317],[166,287],[166,192,292,295],[62,83,166,188,192,291,292,294,296],[62,166,192,291,292,293],[166,218,429,430,431,432],[166,211],[62,166,209],[166,212],[166,192,210,213,214,215,216,217],[62,71,166],[62,78,82,83,166,287,297,298,300],[62,83,166],[82,166,297,316,317,349,367],[166,192,273],[82,166],[82,166,287,316,317,345],[166,313,317],[166,342,343,344],[62,79,83,84,166],[79,82,84,166],[62,79,82,83,166,192],[78,85,166,192],[79,82,84,85,86,166,174,175,176,177,178,179,180,181,182,183,184,185,186,187,189,190,191],[62,166],[84,166],[85,166,174],[79,82,166],[79,85,166,192],[62,79,84,166,174,188],[62,79,166],[62,83,84,166,192],[79,84,166],[82,84,166,174,181,192],[166,374],[166,301,369,370,371,372,373],[78,166,287,300,302,308,310,316,346,348,356,357,363,364,366],[166,209,287,311,356],[62,166,365],[136,166],[166,192],[166,286,287],[74,76,78,166,192],[82,166,356,400],[82,166,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399],[82,166,192,375],[82,166,192,376],[62,83,166,192,275],[80,81,166],[166,248],[166,251],[166,250,251,252],[166,250,252,253,254,255],[166,257],[166,257,259],[136,139,165,166,173,438,439,440],[166,277],[166,442],[166,468],[166,453],[166,457,458,459],[166,456],[166,458],[166,448,454,455,460,463,465,466,467],[166,455,461,462,468],[166,461,464],[166,455,456,461,468],[166,455,468],[166,470],[166,449,450,451,452],[87,166],[123,166],[124,129,157,166],[125,136,137,144,154,165,166],[125,126,136,144,166],[127,166],[128,129,137,145,166],[129,154,162,166],[130,132,136,144,166],[131,166],[132,133,166],[134,136,166],[123,136,166],[136,137,138,154,165,166],[136,137,138,151,154,157,166],[121,124,166,170],[132,136,139,144,154,165,166],[136,137,139,140,144,154,162,165,166],[139,141,154,162,165,166],[87,88,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172],[136,142,166],[143,165,166,170],[132,136,144,154,166],[145,166],[146,166],[123,147,166],[148,164,166,170],[149,166],[150,166],[136,151,152,166],[151,153,166,168],[124,136,154,155,156,157,166],[124,154,156,166],[154,155,166],[157,166],[158,166],[123,154,166],[136,160,161,166],[160,161,166],[129,144,154,162,166],[163,166],[144,164,166],[124,139,150,165,166],[129,166],[154,166,167],[143,166,168],[166,169],[124,129,136,138,147,154,165,166,168,170],[154,166,171],[139,154,166,173],[166,478,517],[166,478,502,517],[166,517],[166,478],[166,478,503,517],[166,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516],[166,503,517],[166,284],[166,520],[136,154,166,173],[166,277,278,279,280,281,282],[166,277,278],[124,125,154,166],[166,354,355],[166,230],[62,83,166,200,233],[62,83,166,198,200],[62,83,166,200],[62,166,197,199],[83,166],[82,166,400,410],[166,356,400,410],[166,400,410],[82,166,400,405,410,419],[82,166,400,405,410,413,414,420],[166,356,400,411,412,421,422,424],[82,166,400,405],[166,401,406,407,408,409],[62,166,400],[166,400],[82,166,400],[62,83,166,379,380],[82,166,379,380],[62,82,83,166,379,400],[78,166,381,400],[166,380],[166,381,383],[82,166,379],[166,379,381,400],[62,166,188,379,380,383],[62,166,379],[62,83,166,380,400],[166,379,380],[82,166,380,383,390,400],[166,402,403,404],[74,166],[166,209,221,222,223],[77,78,166],[77,166],[75,166],[166,203],[76,166],[76,166,205],[78,166,204,205,206,207,208],[74,75,76,77,166,203],[74,75,76,166],[166,415,416,417,418],[166,416],[166,416,417],[71,166],[64,166],[64,71,166],[62,64,166],[64,65,66,67,68,69,70,166],[166,225],[166,220,225,226,228,229,230,231],[166,209,224],[98,102,165,166],[98,154,165,166],[93,166],[95,98,162,165,166],[144,162,166],[166,173],[93,166,173],[95,98,144,165,166],[90,91,94,97,124,136,154,165,166],[90,96,166],[94,98,124,157,165,166,173],[124,166,173],[114,124,166,173],[92,93,166,173],[98,166],[92,93,94,95,96,97,98,99,100,102,103,104,105,106,107,108,109,110,111,112,113,115,116,117,118,119,120,166],[98,105,106,166],[96,98,106,107,166],[97,166],[90,93,98,166],[98,102,106,107,166],[102,166],[96,98,101,165,166],[90,95,96,98,102,105,166],[124,154,166],[93,98,114,124,166,170,173],[62,73,166,192,195],[62,63,166,193,194],[63,73,166,192],[62,63,166,193,195],[166,261],[62,129,166,193,196,242,246,247,261],[62,63,166,193,195,196,249,256,258,260],[61,62,72,83,166,201,263,264],[62,63,72,166,195,200],[62,63,72,73,166,192,193,195,196,201,202,227,234,263,267,269,270],[62,63,72,166,192,194,195,196,229,232,267],[62,63,72,166,193,195,227,268],[73,166,192,196,261,266],[61,62,166,192,193,195,230],[61,62,63,72,73,83,166,192,193,196,200,201,227,234,235,236,262,263,264,265,267,271],[63,72,166],[62,71,72,166],[62,63,73,166,192,218,219,220,226],[166,266,274,275],[79,166,288],[124,166,193,195,227,229,230,261,269,275,283,434],[62,166,175,226,234,235,266,267,275,283,285,289],[79,82,137,166,218,219,267,275,296,301,368,374,376,377,378,425,426],[61,62,79,124,166,201,226,227,229,230,233,234,235,261,266,269,271,275,283,285,289,428,434],[79,166,185,193,433],[79,124,166,227,229,234,235,262,271,275,283,289],[62,73,192,195],[62,63,193,194],[63,73,192],[62,63,193,195],[196],[62,83,263,264],[62,63,195,200],[62,63,73,192,193,195,196,234,263,267,269],[62,63,194,195,196,267],[63,193,195,268],[73,192,196,261,266],[62,192,193,195],[192],[62,63,73,83,192,193,196,267],[63],[62,71],[62,63,73,192],[79],[79,185,193]],"referencedMap":[[241,1],[239,2],[242,3],[240,4],[237,5],[238,5],[243,5],[246,6],[245,7],[244,5],[338,5],[349,8],[325,9],[323,10],[322,11],[327,12],[331,13],[335,14],[333,15],[328,5],[326,5],[334,16],[330,17],[336,18],[337,19],[324,20],[329,5],[317,21],[304,22],[302,23],[316,24],[307,25],[305,5],[308,26],[306,27],[303,28],[309,29],[310,28],[318,30],[311,5],[312,26],[314,31],[313,32],[315,33],[319,34],[291,5],[292,5],[296,35],[295,36],[294,37],[429,5],[430,5],[433,38],[212,39],[210,40],[213,41],[218,42],[211,5],[214,39],[215,43],[216,40],[217,40],[431,5],[432,5],[301,44],[299,27],[300,28],[297,43],[298,45],[368,46],[351,21],[350,24],[274,47],[273,5],[363,48],[346,49],[348,50],[340,21],[339,24],[341,27],[347,32],[345,51],[344,34],[342,34],[343,34],[183,52],[184,53],[84,54],[86,55],[191,5],[174,23],[192,56],[185,57],[175,58],[186,59],[79,27],[85,60],[176,61],[177,60],[187,5],[189,62],[190,63],[178,5],[179,58],[181,64],[180,65],[182,66],[369,67],[370,67],[374,68],[371,67],[372,67],[373,67],[367,69],[357,70],[366,71],[365,43],[359,72],[358,24],[360,26],[352,27],[361,28],[362,28],[353,5],[275,73],[288,74],[286,5],[287,27],[219,75],[424,76],[423,77],[376,78],[375,79],[293,80],[81,48],[82,81],[80,48],[249,82],[248,5],[252,83],[253,84],[254,84],[251,5],[255,5],[250,5],[256,85],[259,86],[258,86],[260,87],[257,5],[441,88],[278,89],[282,89],[280,89],[277,5],[443,90],[439,5],[444,5],[445,5],[446,5],[447,23],[448,5],[469,91],[454,92],[460,93],[458,5],[457,94],[459,95],[468,96],[463,97],[465,98],[466,99],[467,100],[461,5],[462,100],[464,100],[456,100],[455,5],[471,101],[450,5],[449,5],[452,92],[453,102],[451,92],[472,5],[473,5],[474,5],[442,5],[87,103],[88,103],[123,104],[124,105],[125,106],[126,107],[127,108],[128,109],[129,110],[130,111],[131,112],[132,113],[133,113],[135,72],[134,114],[136,115],[137,116],[138,117],[122,118],[172,5],[139,119],[140,120],[141,121],[173,122],[142,123],[143,124],[144,125],[145,126],[146,127],[147,128],[148,129],[149,130],[150,131],[151,132],[152,132],[153,133],[154,134],[156,135],[155,136],[157,137],[158,138],[159,139],[160,140],[161,141],[162,142],[163,143],[164,144],[165,145],[166,146],[167,147],[168,148],[169,149],[170,150],[171,151],[475,5],[476,5],[440,152],[477,5],[502,153],[503,154],[478,155],[481,155],[500,153],[501,153],[491,153],[490,156],[488,153],[483,153],[496,153],[494,153],[498,153],[482,153],[495,153],[499,153],[484,153],[485,153],[497,153],[479,153],[486,153],[487,153],[489,153],[493,153],[504,157],[492,153],[480,153],[517,158],[516,5],[511,157],[513,159],[512,157],[505,157],[506,157],[508,157],[510,157],[514,159],[515,159],[507,159],[509,159],[285,160],[284,5],[518,5],[519,5],[470,5],[520,5],[521,161],[522,162],[283,163],[89,5],[281,89],[279,164],[332,5],[415,5],[377,165],[378,5],[356,166],[354,167],[355,5],[428,5],[233,45],[234,168],[199,169],[197,170],[200,171],[235,172],[236,172],[188,5],[198,45],[83,5],[438,72],[411,173],[412,174],[413,175],[414,173],[420,176],[421,177],[425,178],[422,173],[401,48],[406,179],[410,180],[407,181],[408,182],[409,183],[392,184],[393,185],[380,186],[382,187],[399,5],[383,23],[400,77],[394,57],[384,188],[395,189],[379,27],[381,190],[385,191],[386,190],[396,5],[397,192],[398,193],[387,5],[388,188],[390,194],[389,195],[391,196],[405,197],[404,182],[402,182],[403,182],[223,198],[74,5],[224,199],[75,200],[208,5],[78,201],[203,202],[222,203],[221,203],[205,204],[206,205],[76,5],[209,206],[204,207],[77,208],[207,5],[426,5],[419,209],[417,210],[418,211],[416,5],[364,5],[320,5],[321,11],[64,212],[67,213],[68,214],[65,215],[66,213],[71,216],[69,43],[70,212],[59,5],[60,5],[10,5],[11,5],[14,5],[13,5],[2,5],[15,5],[16,5],[17,5],[18,5],[19,5],[20,5],[21,5],[22,5],[3,5],[4,5],[23,5],[27,5],[24,5],[25,5],[26,5],[28,5],[29,5],[30,5],[5,5],[31,5],[32,5],[33,5],[34,5],[6,5],[38,5],[35,5],[36,5],[37,5],[39,5],[7,5],[40,5],[45,5],[46,5],[41,5],[42,5],[43,5],[44,5],[8,5],[50,5],[47,5],[48,5],[49,5],[51,5],[9,5],[52,5],[53,5],[54,5],[57,5],[55,5],[56,5],[1,5],[58,5],[12,5],[62,5],[72,5],[228,5],[220,5],[229,5],[226,217],[232,218],[230,217],[225,219],[231,5],[105,220],[112,221],[104,220],[119,222],[96,223],[95,224],[118,225],[113,226],[116,227],[98,228],[97,229],[93,230],[92,231],[115,232],[94,233],[99,234],[100,5],[103,234],[90,5],[121,235],[120,234],[107,236],[108,237],[110,238],[106,239],[109,240],[114,225],[101,241],[102,242],[111,243],[91,244],[117,245],[247,5],[63,5],[263,246],[195,247],[193,248],[61,5],[196,249],[272,250],[262,251],[261,252],[265,253],[201,254],[202,5],[271,255],[268,256],[269,257],[267,258],[270,259],[264,73],[266,260],[194,261],[73,262],[227,263],[276,264],[289,265],[437,266],[290,267],[427,268],[435,269],[434,270],[436,271]],"exportedModulesMap":[[241,1],[239,2],[242,3],[240,4],[237,5],[238,5],[243,5],[246,6],[245,7],[244,5],[338,5],[349,8],[325,9],[323,10],[322,11],[327,12],[331,13],[335,14],[333,15],[328,5],[326,5],[334,16],[330,17],[336,18],[337,19],[324,20],[329,5],[317,21],[304,22],[302,23],[316,24],[307,25],[305,5],[308,26],[306,27],[303,28],[309,29],[310,28],[318,30],[311,5],[312,26],[314,31],[313,32],[315,33],[319,34],[291,5],[292,5],[296,35],[295,36],[294,37],[429,5],[430,5],[433,38],[212,39],[210,40],[213,41],[218,42],[211,5],[214,39],[215,43],[216,40],[217,40],[431,5],[432,5],[301,44],[299,27],[300,28],[297,43],[298,45],[368,46],[351,21],[350,24],[274,47],[273,5],[363,48],[346,49],[348,50],[340,21],[339,24],[341,27],[347,32],[345,51],[344,34],[342,34],[343,34],[183,52],[184,53],[84,54],[86,55],[191,5],[174,23],[192,56],[185,57],[175,58],[186,59],[79,27],[85,60],[176,61],[177,60],[187,5],[189,62],[190,63],[178,5],[179,58],[181,64],[180,65],[182,66],[369,67],[370,67],[374,68],[371,67],[372,67],[373,67],[367,69],[357,70],[366,71],[365,43],[359,72],[358,24],[360,26],[352,27],[361,28],[362,28],[353,5],[275,73],[288,74],[286,5],[287,27],[219,75],[424,76],[423,77],[376,78],[375,79],[293,80],[81,48],[82,81],[80,48],[249,82],[248,5],[252,83],[253,84],[254,84],[251,5],[255,5],[250,5],[256,85],[259,86],[258,86],[260,87],[257,5],[441,88],[278,89],[282,89],[280,89],[277,5],[443,90],[439,5],[444,5],[445,5],[446,5],[447,23],[448,5],[469,91],[454,92],[460,93],[458,5],[457,94],[459,95],[468,96],[463,97],[465,98],[466,99],[467,100],[461,5],[462,100],[464,100],[456,100],[455,5],[471,101],[450,5],[449,5],[452,92],[453,102],[451,92],[472,5],[473,5],[474,5],[442,5],[87,103],[88,103],[123,104],[124,105],[125,106],[126,107],[127,108],[128,109],[129,110],[130,111],[131,112],[132,113],[133,113],[135,72],[134,114],[136,115],[137,116],[138,117],[122,118],[172,5],[139,119],[140,120],[141,121],[173,122],[142,123],[143,124],[144,125],[145,126],[146,127],[147,128],[148,129],[149,130],[150,131],[151,132],[152,132],[153,133],[154,134],[156,135],[155,136],[157,137],[158,138],[159,139],[160,140],[161,141],[162,142],[163,143],[164,144],[165,145],[166,146],[167,147],[168,148],[169,149],[170,150],[171,151],[475,5],[476,5],[440,152],[477,5],[502,153],[503,154],[478,155],[481,155],[500,153],[501,153],[491,153],[490,156],[488,153],[483,153],[496,153],[494,153],[498,153],[482,153],[495,153],[499,153],[484,153],[485,153],[497,153],[479,153],[486,153],[487,153],[489,153],[493,153],[504,157],[492,153],[480,153],[517,158],[516,5],[511,157],[513,159],[512,157],[505,157],[506,157],[508,157],[510,157],[514,159],[515,159],[507,159],[509,159],[285,160],[284,5],[518,5],[519,5],[470,5],[520,5],[521,161],[522,162],[283,163],[89,5],[281,89],[279,164],[332,5],[415,5],[377,165],[378,5],[356,166],[354,167],[355,5],[428,5],[233,45],[234,168],[199,169],[197,170],[200,171],[235,172],[236,172],[188,5],[198,45],[83,5],[438,72],[411,173],[412,174],[413,175],[414,173],[420,176],[421,177],[425,178],[422,173],[401,48],[406,179],[410,180],[407,181],[408,182],[409,183],[392,184],[393,185],[380,186],[382,187],[399,5],[383,23],[400,77],[394,57],[384,188],[395,189],[379,27],[381,190],[385,191],[386,190],[396,5],[397,192],[398,193],[387,5],[388,188],[390,194],[389,195],[391,196],[405,197],[404,182],[402,182],[403,182],[223,198],[74,5],[224,199],[75,200],[208,5],[78,201],[203,202],[222,203],[221,203],[205,204],[206,205],[76,5],[209,206],[204,207],[77,208],[207,5],[426,5],[419,209],[417,210],[418,211],[416,5],[364,5],[320,5],[321,11],[64,212],[67,213],[68,214],[65,215],[66,213],[71,216],[69,43],[70,212],[59,5],[60,5],[10,5],[11,5],[14,5],[13,5],[2,5],[15,5],[16,5],[17,5],[18,5],[19,5],[20,5],[21,5],[22,5],[3,5],[4,5],[23,5],[27,5],[24,5],[25,5],[26,5],[28,5],[29,5],[30,5],[5,5],[31,5],[32,5],[33,5],[34,5],[6,5],[38,5],[35,5],[36,5],[37,5],[39,5],[7,5],[40,5],[45,5],[46,5],[41,5],[42,5],[43,5],[44,5],[8,5],[50,5],[47,5],[48,5],[49,5],[51,5],[9,5],[52,5],[53,5],[54,5],[57,5],[55,5],[56,5],[1,5],[58,5],[12,5],[62,5],[72,5],[228,5],[220,5],[229,5],[226,217],[232,218],[230,217],[225,219],[231,5],[105,220],[112,221],[104,220],[119,222],[96,223],[95,224],[118,225],[113,226],[116,227],[98,228],[97,229],[93,230],[92,231],[115,232],[94,233],[99,234],[100,5],[103,234],[90,5],[121,235],[120,234],[107,236],[108,237],[110,238],[106,239],[109,240],[114,225],[101,241],[102,242],[111,243],[91,244],[117,245],[247,5],[263,272],[195,273],[193,274],[196,275],[272,276],[262,276],[261,276],[265,277],[201,278],[271,279],[268,280],[269,281],[267,282],[270,283],[264,284],[266,285],[194,286],[73,287],[227,288],[289,289],[434,290]],"semanticDiagnosticsPerFile":[241,239,242,240,237,238,243,246,245,244,338,349,325,323,322,327,331,335,333,328,326,334,330,336,337,324,329,317,304,302,316,307,305,308,306,303,309,310,318,311,312,314,313,315,319,291,292,296,295,294,429,430,433,212,210,213,218,211,214,215,216,217,431,432,301,299,300,297,298,368,351,350,274,273,363,346,348,340,339,341,347,345,344,342,343,183,184,84,86,191,174,192,185,175,186,79,85,176,177,187,189,190,178,179,181,180,182,369,370,374,371,372,373,367,357,366,365,359,358,360,352,361,362,353,275,288,286,287,219,424,423,376,375,293,81,82,80,249,248,252,253,254,251,255,250,256,259,258,260,257,441,278,282,280,277,443,439,444,445,446,447,448,469,454,460,458,457,459,468,463,465,466,467,461,462,464,456,455,471,450,449,452,453,451,472,473,474,442,87,88,123,124,125,126,127,128,129,130,131,132,133,135,134,136,137,138,122,172,139,140,141,173,142,143,144,145,146,147,148,149,150,151,152,153,154,156,155,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,475,476,440,477,502,503,478,481,500,501,491,490,488,483,496,494,498,482,495,499,484,485,497,479,486,487,489,493,504,492,480,517,516,511,513,512,505,506,508,510,514,515,507,509,285,284,518,519,470,520,521,522,283,89,281,279,332,415,377,378,356,354,355,428,233,234,199,197,200,235,236,188,198,83,438,411,412,413,414,420,421,425,422,401,406,410,407,408,409,392,393,380,382,399,383,400,394,384,395,379,381,385,386,396,397,398,387,388,390,389,391,405,404,402,403,223,74,224,75,208,78,203,222,221,205,206,76,209,204,77,207,426,419,417,418,416,364,320,321,64,67,68,65,66,71,69,70,59,60,10,11,14,13,2,15,16,17,18,19,20,21,22,3,4,23,27,24,25,26,28,29,30,5,31,32,33,34,6,38,35,36,37,39,7,40,45,46,41,42,43,44,8,50,47,48,49,51,9,52,53,54,57,55,56,1,58,12,62,72,228,220,229,226,232,230,225,231,105,112,104,119,96,95,118,113,116,98,97,93,92,115,94,99,100,103,90,121,120,107,108,110,106,109,114,101,102,111,91,117,247,63,263,195,193,61,196,272,262,261,265,201,202,271,268,269,267,270,264,266,194,73,227,276,289,437,290,427,435,434,436],"latestChangedDtsFile":"./test/handshakes/xx.spec.d.ts"},"version":"5.3.2"} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/package.json b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/package.json new file mode 100644 index 000000000..fe61e2967 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/package.json @@ -0,0 +1,93 @@ +{ + "name": "@chainsafe/libp2p-noise", + "version": "14.0.0", + "author": "ChainSafe ", + "license": "Apache-2.0 OR MIT", + "homepage": "https://github.com/ChainSafe/js-libp2p-noise#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/ChainSafe/js-libp2p-noise.git" + }, + "bugs": { + "url": "https://github.com/ChainSafe/js-libp2p-noise/issues" + }, + "keywords": [ + "crypto", + "libp2p", + "noise" + ], + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + }, + "type": "module", + "types": "./dist/src/index.d.ts", + "files": [ + "src", + "dist", + "!dist/test", + "!**/*.tsbuildinfo" + ], + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "import": "./dist/src/index.js" + } + }, + "eslintConfig": { + "extends": "ipfs", + "parserOptions": { + "sourceType": "module" + }, + "rules": { + "@typescript-eslint/no-unused-vars": "error", + "@typescript-eslint/explicit-function-return-type": "warn", + "@typescript-eslint/strict-boolean-expressions": "off" + }, + "ignorePatterns": [ + "src/proto/payload.js", + "src/proto/payload.d.ts", + "test/fixtures/node-globals.js" + ] + }, + "scripts": { + "bench": "node benchmarks/benchmark.js", + "clean": "aegir clean", + "dep-check": "aegir dep-check", + "build": "aegir build", + "lint": "aegir lint", + "lint:fix": "aegir lint --fix", + "test": "aegir test", + "test:node": "aegir test -t node", + "test:browser": "aegir test -t browser -t webworker", + "test:electron-main": "aegir test -t electron-main", + "test:interop": "aegir test -t node -f dist/test/interop.js", + "docs": "aegir docs", + "proto:gen": "protons ./src/proto/payload.proto", + "prepublish": "npm run build" + }, + "dependencies": { + "@chainsafe/as-chacha20poly1305": "^0.1.0", + "@chainsafe/as-sha256": "^0.4.1", + "@libp2p/crypto": "^3.0.0", + "@libp2p/interface": "^1.0.0", + "@libp2p/peer-id": "^4.0.0", + "@noble/ciphers": "^0.4.0", + "@noble/curves": "^1.1.0", + "@noble/hashes": "^1.3.1", + "it-byte-stream": "^1.0.0", + "it-length-prefixed": "^9.0.1", + "it-length-prefixed-stream": "^1.0.0", + "it-pair": "^2.0.6", + "it-pipe": "^3.0.1", + "it-stream-types": "^2.0.1", + "protons-runtime": "^5.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.4", + "wherearewe": "^2.0.1" + }, + "browser": { + "./dist/src/crypto/index.js": "./dist/src/crypto/index.browser.js", + "util": false + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/@types/basic.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/@types/basic.ts new file mode 100644 index 000000000..364d1f89e --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/@types/basic.ts @@ -0,0 +1,5 @@ +export type bytes = Uint8Array +export type bytes32 = Uint8Array +export type bytes16 = Uint8Array + +export type uint64 = number diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/@types/handshake-interface.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/@types/handshake-interface.ts new file mode 100644 index 000000000..a02af2ac2 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/@types/handshake-interface.ts @@ -0,0 +1,12 @@ +import type { NoiseSession } from './handshake.js' +import type { NoiseExtensions } from '../proto/payload.js' +import type { PeerId } from '@libp2p/interface' +import type { Uint8ArrayList } from 'uint8arraylist' + +export interface IHandshake { + session: NoiseSession + remotePeer: PeerId + remoteExtensions: NoiseExtensions + encrypt(plaintext: Uint8Array | Uint8ArrayList, session: NoiseSession): Uint8Array | Uint8ArrayList + decrypt(ciphertext: Uint8Array | Uint8ArrayList, session: NoiseSession, dst?: Uint8Array): { plaintext: Uint8Array | Uint8ArrayList, valid: boolean } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/@types/handshake.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/@types/handshake.ts new file mode 100644 index 000000000..46754ea61 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/@types/handshake.ts @@ -0,0 +1,49 @@ +import type { bytes, bytes32, uint64 } from './basic.js' +import type { KeyPair } from './libp2p.js' +import type { Nonce } from '../nonce.js' +import type { Uint8ArrayList } from 'uint8arraylist' + +export type Hkdf = [bytes, bytes, bytes] + +export interface MessageBuffer { + ne: bytes32 + ns: Uint8Array | Uint8ArrayList + ciphertext: Uint8Array | Uint8ArrayList +} + +export interface CipherState { + k: bytes32 + // For performance reasons, the nonce is represented as a Nonce object + // The nonce is treated as a uint64, even though the underlying `number` only has 52 safely-available bits. + n: Nonce +} + +export interface SymmetricState { + cs: CipherState + ck: bytes32 // chaining key + h: bytes32 // handshake hash +} + +export interface HandshakeState { + ss: SymmetricState + s: KeyPair + e?: KeyPair + rs: Uint8Array | Uint8ArrayList + re: bytes32 + psk: bytes32 +} + +export interface NoiseSession { + hs: HandshakeState + h?: bytes32 + cs1?: CipherState + cs2?: CipherState + mc: uint64 + i: boolean +} + +export interface INoisePayload { + identityKey: bytes + identitySig: bytes + data: bytes +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/@types/libp2p.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/@types/libp2p.ts new file mode 100644 index 000000000..055b753ad --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/@types/libp2p.ts @@ -0,0 +1,10 @@ +import type { bytes32 } from './basic.js' +import type { NoiseExtensions } from '../proto/payload.js' +import type { ConnectionEncrypter } from '@libp2p/interface' + +export interface KeyPair { + publicKey: bytes32 + privateKey: bytes32 +} + +export interface INoiseConnection extends ConnectionEncrypter {} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/constants.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/constants.ts new file mode 100644 index 000000000..7e8105c47 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/constants.ts @@ -0,0 +1,4 @@ +export const NOISE_MSG_MAX_LENGTH_BYTES = 65535 +export const NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG = NOISE_MSG_MAX_LENGTH_BYTES - 16 + +export const DUMP_SESSION_KEYS = Boolean(globalThis.process?.env?.DUMP_SESSION_KEYS) diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/crypto.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/crypto.ts new file mode 100644 index 000000000..cfb048cd1 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/crypto.ts @@ -0,0 +1,17 @@ +import { type Uint8ArrayList } from 'uint8arraylist' +import type { bytes32 } from './@types/basic.js' +import type { Hkdf } from './@types/handshake.js' +import type { KeyPair } from './@types/libp2p.js' + +export interface ICryptoInterface { + hashSHA256(data: Uint8Array | Uint8ArrayList): Uint8Array + + getHKDF(ck: bytes32, ikm: Uint8Array): Hkdf + + generateX25519KeyPair(): KeyPair + generateX25519KeyPairFromSeed(seed: Uint8Array): KeyPair + generateX25519SharedKey(privateKey: Uint8Array | Uint8ArrayList, publicKey: Uint8Array | Uint8ArrayList): Uint8Array + + chaCha20Poly1305Encrypt(plaintext: Uint8Array | Uint8ArrayList, nonce: Uint8Array, ad: Uint8Array, k: bytes32): Uint8ArrayList | Uint8Array + chaCha20Poly1305Decrypt(ciphertext: Uint8Array | Uint8ArrayList, nonce: Uint8Array, ad: Uint8Array, k: bytes32, dst?: Uint8Array): Uint8ArrayList | Uint8Array | null +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/crypto/index.browser.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/crypto/index.browser.ts new file mode 100644 index 000000000..39c9ea7d0 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/crypto/index.browser.ts @@ -0,0 +1,3 @@ +import { pureJsCrypto } from './js.js' + +export const defaultCrypto = pureJsCrypto diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/crypto/index.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/crypto/index.ts new file mode 100644 index 000000000..3b57d9830 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/crypto/index.ts @@ -0,0 +1,217 @@ +import crypto from 'node:crypto' +import { newInstance, ChaCha20Poly1305 } from '@chainsafe/as-chacha20poly1305' +import { digest } from '@chainsafe/as-sha256' +import { Uint8ArrayList } from 'uint8arraylist' +import { isElectronMain } from 'wherearewe' +import { pureJsCrypto } from './js.js' +import type { KeyPair } from '../@types/libp2p.js' +import type { ICryptoInterface } from '../crypto.js' + +const ctx = newInstance() +const asImpl = new ChaCha20Poly1305(ctx) +const CHACHA_POLY1305 = 'chacha20-poly1305' +const PKCS8_PREFIX = Buffer.from([0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x6e, 0x04, 0x22, 0x04, 0x20]) +const X25519_PREFIX = Buffer.from([0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x6e, 0x03, 0x21, 0x00]) +const nodeCrypto: Pick = { + hashSHA256 (data) { + const hash = crypto.createHash('sha256') + + if (data instanceof Uint8Array) { + return hash.update(data).digest() + } + + for (const buf of data) { + hash.update(buf) + } + + return hash.digest() + }, + + chaCha20Poly1305Encrypt (plaintext, nonce, ad, k) { + const cipher = crypto.createCipheriv(CHACHA_POLY1305, k, nonce, { + authTagLength: 16 + }) + cipher.setAAD(ad, { plaintextLength: plaintext.byteLength }) + + if (plaintext instanceof Uint8Array) { + const updated = cipher.update(plaintext) + const final = cipher.final() + const tag = cipher.getAuthTag() + + return Buffer.concat([updated, tag, final], updated.byteLength + tag.byteLength + final.byteLength) + } + + const output = new Uint8ArrayList() + + for (const buf of plaintext) { + output.append(cipher.update(buf)) + } + + const final = cipher.final() + + if (final.byteLength > 0) { + output.append(final) + } + + output.append(cipher.getAuthTag()) + + return output + }, + + chaCha20Poly1305Decrypt (ciphertext, nonce, ad, k, _dst) { + const authTag = ciphertext.subarray(ciphertext.length - 16) + const decipher = crypto.createDecipheriv(CHACHA_POLY1305, k, nonce, { + authTagLength: 16 + }) + + let text: Uint8Array | Uint8ArrayList + + if (ciphertext instanceof Uint8Array) { + text = ciphertext.subarray(0, ciphertext.length - 16) + } else { + text = ciphertext.sublist(0, ciphertext.length - 16) + } + + decipher.setAAD(ad, { + plaintextLength: text.byteLength + }) + decipher.setAuthTag(authTag) + + if (text instanceof Uint8Array) { + const output = decipher.update(text) + const final = decipher.final() + + if (final.byteLength > 0) { + return Buffer.concat([output, final], output.byteLength + final.byteLength) + } + + return output + } + + const output = new Uint8ArrayList() + + for (const buf of text) { + output.append(decipher.update(buf)) + } + + const final = decipher.final() + + if (final.byteLength > 0) { + output.append(final) + } + + return output + } +} + +const asCrypto: Pick = { + hashSHA256 (data) { + return digest(data.subarray()) + }, + chaCha20Poly1305Encrypt (plaintext, nonce, ad, k) { + return asImpl.seal(k, nonce, plaintext.subarray(), ad) + }, + chaCha20Poly1305Decrypt (ciphertext, nonce, ad, k, dst) { + return asImpl.open(k, nonce, ciphertext.subarray(), ad, dst) + } +} + +// benchmarks show that for chacha20poly1305 +// the as implementation is faster for smaller payloads(<1200) +// and the node implementation is faster for larger payloads +export const defaultCrypto: ICryptoInterface = { + ...pureJsCrypto, + hashSHA256 (data) { + return nodeCrypto.hashSHA256(data) + }, + chaCha20Poly1305Encrypt (plaintext, nonce, ad, k) { + if (plaintext.byteLength < 1200) { + return asCrypto.chaCha20Poly1305Encrypt(plaintext, nonce, ad, k) + } + return nodeCrypto.chaCha20Poly1305Encrypt(plaintext, nonce, ad, k) + }, + chaCha20Poly1305Decrypt (ciphertext, nonce, ad, k, dst) { + if (ciphertext.byteLength < 1200) { + return asCrypto.chaCha20Poly1305Decrypt(ciphertext, nonce, ad, k, dst) + } + return nodeCrypto.chaCha20Poly1305Decrypt(ciphertext, nonce, ad, k, dst) + }, + generateX25519KeyPair (): KeyPair { + const { publicKey, privateKey } = crypto.generateKeyPairSync('x25519', { + publicKeyEncoding: { + type: 'spki', + format: 'der' + }, + privateKeyEncoding: { + type: 'pkcs8', + format: 'der' + } + }) + + return { + publicKey: publicKey.subarray(X25519_PREFIX.length), + privateKey: privateKey.subarray(PKCS8_PREFIX.length) + } + }, + generateX25519KeyPairFromSeed (seed: Uint8Array): KeyPair { + const privateKey = crypto.createPrivateKey({ + key: Buffer.concat([ + PKCS8_PREFIX, + seed + ], PKCS8_PREFIX.byteLength + seed.byteLength), + type: 'pkcs8', + format: 'der' + }) + + const publicKey = crypto.createPublicKey(privateKey) + .export({ + type: 'spki', + format: 'der' + }).subarray(X25519_PREFIX.length) + + return { + publicKey, + privateKey: seed + } + }, + generateX25519SharedKey (privateKey: Uint8Array | Uint8ArrayList, publicKey: Uint8Array | Uint8ArrayList): Uint8Array { + if (publicKey instanceof Uint8Array) { + publicKey = Buffer.concat([ + X25519_PREFIX, + publicKey + ], X25519_PREFIX.byteLength + publicKey.byteLength) + } else { + publicKey.prepend(X25519_PREFIX) + publicKey = publicKey.subarray() + } + + if (privateKey instanceof Uint8Array) { + privateKey = Buffer.concat([ + PKCS8_PREFIX, + privateKey + ], PKCS8_PREFIX.byteLength + privateKey.byteLength) + } else { + privateKey.prepend(PKCS8_PREFIX) + privateKey = privateKey.subarray() + } + + return crypto.diffieHellman({ + publicKey: crypto.createPublicKey({ + key: Buffer.from(publicKey, publicKey.byteOffset, publicKey.byteLength), + type: 'spki', + format: 'der' + }), + privateKey: crypto.createPrivateKey({ + key: Buffer.from(privateKey, privateKey.byteOffset, privateKey.byteLength), + type: 'pkcs8', + format: 'der' + }) + }) + } +} + +// no chacha20-poly1305 in electron https://github.com/electron/electron/issues/24024 +if (isElectronMain) { + defaultCrypto.chaCha20Poly1305Encrypt = asCrypto.chaCha20Poly1305Encrypt + defaultCrypto.chaCha20Poly1305Decrypt = asCrypto.chaCha20Poly1305Decrypt +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/crypto/js.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/crypto/js.ts new file mode 100644 index 000000000..034a0a3dd --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/crypto/js.ts @@ -0,0 +1,58 @@ +import { chacha20poly1305 } from '@noble/ciphers/chacha' +import { x25519 } from '@noble/curves/ed25519' +import { extract, expand } from '@noble/hashes/hkdf' +import { sha256 } from '@noble/hashes/sha256' +import type { bytes32 } from '../@types/basic.js' +import type { Hkdf } from '../@types/handshake.js' +import type { KeyPair } from '../@types/libp2p.js' +import type { ICryptoInterface } from '../crypto.js' +import type { Uint8ArrayList } from 'uint8arraylist' + +export const pureJsCrypto: ICryptoInterface = { + hashSHA256 (data: Uint8Array | Uint8ArrayList): Uint8Array { + return sha256(data.subarray()) + }, + + getHKDF (ck: bytes32, ikm: Uint8Array): Hkdf { + const prk = extract(sha256, ikm, ck) + const okmU8Array = expand(sha256, prk, undefined, 96) + const okm = okmU8Array + + const k1 = okm.subarray(0, 32) + const k2 = okm.subarray(32, 64) + const k3 = okm.subarray(64, 96) + + return [k1, k2, k3] + }, + + generateX25519KeyPair (): KeyPair { + const secretKey = x25519.utils.randomPrivateKey() + const publicKey = x25519.getPublicKey(secretKey) + + return { + publicKey, + privateKey: secretKey + } + }, + + generateX25519KeyPairFromSeed (seed: Uint8Array): KeyPair { + const publicKey = x25519.getPublicKey(seed) + + return { + publicKey, + privateKey: seed + } + }, + + generateX25519SharedKey (privateKey: Uint8Array | Uint8ArrayList, publicKey: Uint8Array | Uint8ArrayList): Uint8Array { + return x25519.getSharedSecret(privateKey.subarray(), publicKey.subarray()) + }, + + chaCha20Poly1305Encrypt (plaintext: Uint8Array | Uint8ArrayList, nonce: Uint8Array, ad: Uint8Array, k: bytes32): Uint8Array { + return chacha20poly1305(k, nonce, ad).encrypt(plaintext.subarray()) + }, + + chaCha20Poly1305Decrypt (ciphertext: Uint8Array | Uint8ArrayList, nonce: Uint8Array, ad: Uint8Array, k: bytes32, dst?: Uint8Array): Uint8Array | null { + return chacha20poly1305(k, nonce, ad).decrypt(ciphertext.subarray(), dst) + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/crypto/streaming.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/crypto/streaming.ts new file mode 100644 index 000000000..9ff079278 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/crypto/streaming.ts @@ -0,0 +1,63 @@ +import { Uint8ArrayList } from 'uint8arraylist' +import { allocUnsafe as uint8ArrayAllocUnsafe } from 'uint8arrays/alloc' +import { NOISE_MSG_MAX_LENGTH_BYTES, NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG } from '../constants.js' +import { uint16BEEncode } from '../encoder.js' +import type { IHandshake } from '../@types/handshake-interface.js' +import type { MetricsRegistry } from '../metrics.js' +import type { Transform } from 'it-stream-types' + +const CHACHA_TAG_LENGTH = 16 + +// Returns generator that encrypts payload from the user +export function encryptStream (handshake: IHandshake, metrics?: MetricsRegistry): Transform> { + return async function * (source) { + for await (const chunk of source) { + for (let i = 0; i < chunk.length; i += NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG) { + let end = i + NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG + if (end > chunk.length) { + end = chunk.length + } + + let data: Uint8Array | Uint8ArrayList + + if (chunk instanceof Uint8Array) { + data = handshake.encrypt(chunk.subarray(i, end), handshake.session) + } else { + data = handshake.encrypt(chunk.sublist(i, end), handshake.session) + } + + metrics?.encryptedPackets.increment() + + yield new Uint8ArrayList(uint16BEEncode(data.byteLength), data) + } + } + } +} + +// Decrypt received payload to the user +export function decryptStream (handshake: IHandshake, metrics?: MetricsRegistry): Transform, AsyncGenerator> { + return async function * (source) { + for await (const chunk of source) { + for (let i = 0; i < chunk.length; i += NOISE_MSG_MAX_LENGTH_BYTES) { + let end = i + NOISE_MSG_MAX_LENGTH_BYTES + if (end > chunk.length) { + end = chunk.length + } + + if (end - CHACHA_TAG_LENGTH < i) { + throw new Error('Invalid chunk') + } + + const encrypted = chunk.sublist(i, end) + const dst = uint8ArrayAllocUnsafe(end - CHACHA_TAG_LENGTH - i) + const { plaintext: decrypted, valid } = handshake.decrypt(encrypted, handshake.session, dst) + if (!valid) { + metrics?.decryptErrors.increment() + throw new Error('Failed to validate decrypted chunk') + } + metrics?.decryptedPackets.increment() + yield decrypted + } + } + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/encoder.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/encoder.ts new file mode 100644 index 000000000..8c4d203d4 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/encoder.ts @@ -0,0 +1,73 @@ +import { Uint8ArrayList } from 'uint8arraylist' +import { alloc as uint8ArrayAlloc, allocUnsafe as uint8ArrayAllocUnsafe } from 'uint8arrays/alloc' +import type { bytes } from './@types/basic.js' +import type { MessageBuffer } from './@types/handshake.js' +import type { LengthDecoderFunction } from 'it-length-prefixed' + +export const uint16BEEncode = (value: number): Uint8Array => { + const target = uint8ArrayAllocUnsafe(2) + new DataView(target.buffer, target.byteOffset, target.byteLength).setUint16(0, value, false) + return target +} +uint16BEEncode.bytes = 2 + +export const uint16BEDecode: LengthDecoderFunction = (data: Uint8Array | Uint8ArrayList): number => { + if (data.length < 2) throw RangeError('Could not decode int16BE') + + if (data instanceof Uint8Array) { + return new DataView(data.buffer, data.byteOffset, data.byteLength).getUint16(0, false) + } + + return data.getUint16(0) +} +uint16BEDecode.bytes = 2 + +// Note: IK and XX encoder usage is opposite (XX uses in stages encode0 where IK uses encode1) + +export function encode0 (message: MessageBuffer): Uint8ArrayList { + return new Uint8ArrayList(message.ne, message.ciphertext) +} + +export function encode1 (message: MessageBuffer): Uint8ArrayList { + return new Uint8ArrayList(message.ne, message.ns, message.ciphertext) +} + +export function encode2 (message: MessageBuffer): Uint8ArrayList { + return new Uint8ArrayList(message.ns, message.ciphertext) +} + +export function decode0 (input: bytes): MessageBuffer { + if (input.length < 32) { + throw new Error('Cannot decode stage 0 MessageBuffer: length less than 32 bytes.') + } + + return { + ne: input.subarray(0, 32), + ciphertext: input.subarray(32, input.length), + ns: uint8ArrayAlloc(0) + } +} + +export function decode1 (input: bytes): MessageBuffer { + if (input.length < 80) { + throw new Error('Cannot decode stage 1 MessageBuffer: length less than 80 bytes.') + } + + return { + ne: input.subarray(0, 32), + ns: input.subarray(32, 80), + ciphertext: input.subarray(80, input.length) + } +} + +export function decode2 (input: bytes): MessageBuffer { + if (input.length < 48) { + throw new Error('Cannot decode stage 2 MessageBuffer: length less than 48 bytes.') + } + + return { + ne: uint8ArrayAlloc(0), + ns: input.subarray(0, 48), + ciphertext: input.subarray(48, input.length) + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/errors.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/errors.ts new file mode 100644 index 000000000..2e1aa43d8 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/errors.ts @@ -0,0 +1,21 @@ +export class UnexpectedPeerError extends Error { + public code: string + + constructor (message = 'Unexpected Peer') { + super(message) + this.code = UnexpectedPeerError.code + } + + static readonly code = 'ERR_UNEXPECTED_PEER' +} + +export class InvalidCryptoExchangeError extends Error { + public code: string + + constructor (message = 'Invalid crypto exchange') { + super(message) + this.code = InvalidCryptoExchangeError.code + } + + static readonly code = 'ERR_INVALID_CRYPTO_EXCHANGE' +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/handshake-xx.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/handshake-xx.ts new file mode 100644 index 000000000..a64c518f3 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/handshake-xx.ts @@ -0,0 +1,182 @@ +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc' +import { decode0, decode1, decode2, encode0, encode1, encode2 } from './encoder.js' +import { InvalidCryptoExchangeError, UnexpectedPeerError } from './errors.js' +import { XX } from './handshakes/xx.js' +import { + logLocalStaticKeys, + logLocalEphemeralKeys, + logRemoteEphemeralKey, + logRemoteStaticKey, + logCipherState +} from './logger.js' +import { + decodePayload, + getPeerIdFromPayload, + verifySignedPayload +} from './utils.js' +import type { bytes, bytes32 } from './@types/basic.js' +import type { IHandshake } from './@types/handshake-interface.js' +import type { CipherState, NoiseSession } from './@types/handshake.js' +import type { KeyPair } from './@types/libp2p.js' +import type { ICryptoInterface } from './crypto.js' +import type { NoiseComponents } from './index.js' +import type { NoiseExtensions } from './proto/payload.js' +import type { Logger, PeerId } from '@libp2p/interface' +import type { LengthPrefixedStream } from 'it-length-prefixed-stream' +import type { Uint8ArrayList } from 'uint8arraylist' + +export class XXHandshake implements IHandshake { + public isInitiator: boolean + public session: NoiseSession + public remotePeer!: PeerId + public remoteExtensions: NoiseExtensions = { webtransportCerthashes: [] } + + protected payload: bytes + protected connection: LengthPrefixedStream + protected xx: XX + protected staticKeypair: KeyPair + + private readonly prologue: bytes32 + private readonly log: Logger + + constructor ( + components: NoiseComponents, + isInitiator: boolean, + payload: bytes, + prologue: bytes32, + crypto: ICryptoInterface, + staticKeypair: KeyPair, + connection: LengthPrefixedStream, + remotePeer?: PeerId, + handshake?: XX + ) { + this.log = components.logger.forComponent('libp2p:noise:xxhandshake') + this.isInitiator = isInitiator + this.payload = payload + this.prologue = prologue + this.staticKeypair = staticKeypair + this.connection = connection + if (remotePeer) { + this.remotePeer = remotePeer + } + this.xx = handshake ?? new XX(components, crypto) + this.session = this.xx.initSession(this.isInitiator, this.prologue, this.staticKeypair) + } + + // stage 0 + public async propose (): Promise { + logLocalStaticKeys(this.session.hs.s, this.log) + if (this.isInitiator) { + this.log.trace('Stage 0 - Initiator starting to send first message.') + const messageBuffer = this.xx.sendMessage(this.session, uint8ArrayAlloc(0)) + await this.connection.write(encode0(messageBuffer)) + this.log.trace('Stage 0 - Initiator finished sending first message.') + logLocalEphemeralKeys(this.session.hs.e, this.log) + } else { + this.log.trace('Stage 0 - Responder waiting to receive first message...') + const receivedMessageBuffer = decode0((await this.connection.read()).subarray()) + const { valid } = this.xx.recvMessage(this.session, receivedMessageBuffer) + if (!valid) { + throw new InvalidCryptoExchangeError('xx handshake stage 0 validation fail') + } + this.log.trace('Stage 0 - Responder received first message.') + logRemoteEphemeralKey(this.session.hs.re, this.log) + } + } + + // stage 1 + public async exchange (): Promise { + if (this.isInitiator) { + this.log.trace('Stage 1 - Initiator waiting to receive first message from responder...') + const receivedMessageBuffer = decode1((await this.connection.read()).subarray()) + const { plaintext, valid } = this.xx.recvMessage(this.session, receivedMessageBuffer) + if (!valid) { + throw new InvalidCryptoExchangeError('xx handshake stage 1 validation fail') + } + this.log.trace('Stage 1 - Initiator received the message.') + logRemoteEphemeralKey(this.session.hs.re, this.log) + logRemoteStaticKey(this.session.hs.rs, this.log) + + this.log.trace("Initiator going to check remote's signature...") + try { + const decodedPayload = decodePayload(plaintext) + this.remotePeer = this.remotePeer || await getPeerIdFromPayload(decodedPayload) + await verifySignedPayload(this.session.hs.rs, decodedPayload, this.remotePeer) + this.setRemoteNoiseExtension(decodedPayload.extensions) + } catch (e) { + const err = e as Error + throw new UnexpectedPeerError(`Error occurred while verifying signed payload: ${err.message}`) + } + this.log.trace('All good with the signature!') + } else { + this.log.trace('Stage 1 - Responder sending out first message with signed payload and static key.') + const messageBuffer = this.xx.sendMessage(this.session, this.payload) + await this.connection.write(encode1(messageBuffer)) + this.log.trace('Stage 1 - Responder sent the second handshake message with signed payload.') + logLocalEphemeralKeys(this.session.hs.e, this.log) + } + } + + // stage 2 + public async finish (): Promise { + if (this.isInitiator) { + this.log.trace('Stage 2 - Initiator sending third handshake message.') + const messageBuffer = this.xx.sendMessage(this.session, this.payload) + await this.connection.write(encode2(messageBuffer)) + this.log.trace('Stage 2 - Initiator sent message with signed payload.') + } else { + this.log.trace('Stage 2 - Responder waiting for third handshake message...') + const receivedMessageBuffer = decode2((await this.connection.read()).subarray()) + const { plaintext, valid } = this.xx.recvMessage(this.session, receivedMessageBuffer) + if (!valid) { + throw new InvalidCryptoExchangeError('xx handshake stage 2 validation fail') + } + this.log.trace('Stage 2 - Responder received the message, finished handshake.') + + try { + const decodedPayload = decodePayload(plaintext) + this.remotePeer = this.remotePeer || await getPeerIdFromPayload(decodedPayload) + await verifySignedPayload(this.session.hs.rs, decodedPayload, this.remotePeer) + this.setRemoteNoiseExtension(decodedPayload.extensions) + } catch (e) { + const err = e as Error + throw new UnexpectedPeerError(`Error occurred while verifying signed payload: ${err.message}`) + } + } + logCipherState(this.session, this.log) + } + + public encrypt (plaintext: Uint8Array | Uint8ArrayList, session: NoiseSession): Uint8Array | Uint8ArrayList { + const cs = this.getCS(session) + + return this.xx.encryptWithAd(cs, uint8ArrayAlloc(0), plaintext) + } + + public decrypt (ciphertext: Uint8Array | Uint8ArrayList, session: NoiseSession, dst?: Uint8Array): { plaintext: Uint8Array | Uint8ArrayList, valid: boolean } { + const cs = this.getCS(session, false) + + return this.xx.decryptWithAd(cs, uint8ArrayAlloc(0), ciphertext, dst) + } + + public getRemoteStaticKey (): Uint8Array | Uint8ArrayList { + return this.session.hs.rs + } + + private getCS (session: NoiseSession, encryption = true): CipherState { + if (!session.cs1 || !session.cs2) { + throw new InvalidCryptoExchangeError('Handshake not completed properly, cipher state does not exist.') + } + + if (this.isInitiator) { + return encryption ? session.cs1 : session.cs2 + } else { + return encryption ? session.cs2 : session.cs1 + } + } + + protected setRemoteNoiseExtension (e: NoiseExtensions | null | undefined): void { + if (e) { + this.remoteExtensions = e + } + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/handshakes/abstract-handshake.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/handshakes/abstract-handshake.ts new file mode 100644 index 000000000..9e34a61c4 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/handshakes/abstract-handshake.ts @@ -0,0 +1,185 @@ +import { Uint8ArrayList } from 'uint8arraylist' +import { fromString as uint8ArrayFromString } from 'uint8arrays' +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc' +import { equals as uint8ArrayEquals } from 'uint8arrays/equals' +import { Nonce } from '../nonce.js' +import type { bytes, bytes32 } from '../@types/basic.js' +import type { CipherState, MessageBuffer, SymmetricState } from '../@types/handshake.js' +import type { ICryptoInterface } from '../crypto.js' +import type { NoiseComponents } from '../index.js' +import type { Logger } from '@libp2p/interface' + +export interface DecryptedResult { + plaintext: Uint8ArrayList | Uint8Array + valid: boolean +} + +export interface SplitState { + cs1: CipherState + cs2: CipherState +} + +export abstract class AbstractHandshake { + public crypto: ICryptoInterface + private readonly log: Logger + + constructor (components: NoiseComponents, crypto: ICryptoInterface) { + this.log = components.logger.forComponent('libp2p:noise:abstract-handshake') + this.crypto = crypto + } + + public encryptWithAd (cs: CipherState, ad: Uint8Array, plaintext: Uint8Array | Uint8ArrayList): Uint8Array | Uint8ArrayList { + const e = this.encrypt(cs.k, cs.n, ad, plaintext) + cs.n.increment() + + return e + } + + public decryptWithAd (cs: CipherState, ad: Uint8Array, ciphertext: Uint8Array | Uint8ArrayList, dst?: Uint8Array): DecryptedResult { + const { plaintext, valid } = this.decrypt(cs.k, cs.n, ad, ciphertext, dst) + if (valid) cs.n.increment() + + return { plaintext, valid } + } + + // Cipher state related + protected hasKey (cs: CipherState): boolean { + return !this.isEmptyKey(cs.k) + } + + protected createEmptyKey (): bytes32 { + return uint8ArrayAlloc(32) + } + + protected isEmptyKey (k: bytes32): boolean { + const emptyKey = this.createEmptyKey() + return uint8ArrayEquals(emptyKey, k) + } + + protected encrypt (k: bytes32, n: Nonce, ad: Uint8Array, plaintext: Uint8Array | Uint8ArrayList): Uint8Array | Uint8ArrayList { + n.assertValue() + + return this.crypto.chaCha20Poly1305Encrypt(plaintext, n.getBytes(), ad, k) + } + + protected encryptAndHash (ss: SymmetricState, plaintext: bytes): Uint8Array | Uint8ArrayList { + let ciphertext + if (this.hasKey(ss.cs)) { + ciphertext = this.encryptWithAd(ss.cs, ss.h, plaintext) + } else { + ciphertext = plaintext + } + + this.mixHash(ss, ciphertext) + return ciphertext + } + + protected decrypt (k: bytes32, n: Nonce, ad: bytes, ciphertext: Uint8Array | Uint8ArrayList, dst?: Uint8Array): DecryptedResult { + n.assertValue() + + const encryptedMessage = this.crypto.chaCha20Poly1305Decrypt(ciphertext, n.getBytes(), ad, k, dst) + + if (encryptedMessage) { + return { + plaintext: encryptedMessage, + valid: true + } + } else { + return { + plaintext: uint8ArrayAlloc(0), + valid: false + } + } + } + + protected decryptAndHash (ss: SymmetricState, ciphertext: Uint8Array | Uint8ArrayList): DecryptedResult { + let plaintext: Uint8Array | Uint8ArrayList + let valid = true + if (this.hasKey(ss.cs)) { + ({ plaintext, valid } = this.decryptWithAd(ss.cs, ss.h, ciphertext)) + } else { + plaintext = ciphertext + } + + this.mixHash(ss, ciphertext) + return { plaintext, valid } + } + + protected dh (privateKey: bytes32, publicKey: Uint8Array | Uint8ArrayList): bytes32 { + try { + const derivedU8 = this.crypto.generateX25519SharedKey(privateKey, publicKey) + + if (derivedU8.length === 32) { + return derivedU8 + } + + return derivedU8.subarray(0, 32) + } catch (e) { + const err = e as Error + this.log.error('error deriving shared key', err) + return uint8ArrayAlloc(32) + } + } + + protected mixHash (ss: SymmetricState, data: Uint8Array | Uint8ArrayList): void { + ss.h = this.getHash(ss.h, data) + } + + protected getHash (a: Uint8Array, b: Uint8Array | Uint8ArrayList): Uint8Array { + const u = this.crypto.hashSHA256(new Uint8ArrayList(a, b)) + return u + } + + protected mixKey (ss: SymmetricState, ikm: bytes32): void { + const [ck, tempK] = this.crypto.getHKDF(ss.ck, ikm) + ss.cs = this.initializeKey(tempK) + ss.ck = ck + } + + protected initializeKey (k: bytes32): CipherState { + return { k, n: new Nonce() } + } + + // Symmetric state related + + protected initializeSymmetric (protocolName: string): SymmetricState { + const protocolNameBytes = uint8ArrayFromString(protocolName, 'utf-8') + const h = this.hashProtocolName(protocolNameBytes) + + const ck = h + const key = this.createEmptyKey() + const cs: CipherState = this.initializeKey(key) + + return { cs, ck, h } + } + + protected hashProtocolName (protocolName: Uint8Array): bytes32 { + if (protocolName.length <= 32) { + const h = uint8ArrayAlloc(32) + h.set(protocolName) + return h + } else { + return this.getHash(protocolName, uint8ArrayAlloc(0)) + } + } + + protected split (ss: SymmetricState): SplitState { + const [tempk1, tempk2] = this.crypto.getHKDF(ss.ck, uint8ArrayAlloc(0)) + const cs1 = this.initializeKey(tempk1) + const cs2 = this.initializeKey(tempk2) + + return { cs1, cs2 } + } + + protected writeMessageRegular (cs: CipherState, payload: bytes): MessageBuffer { + const ciphertext = this.encryptWithAd(cs, uint8ArrayAlloc(0), payload) + const ne = this.createEmptyKey() + const ns = uint8ArrayAlloc(0) + + return { ne, ns, ciphertext } + } + + protected readMessageRegular (cs: CipherState, message: MessageBuffer): DecryptedResult { + return this.decryptWithAd(cs, uint8ArrayAlloc(0), message.ciphertext) + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/handshakes/xx.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/handshakes/xx.ts new file mode 100644 index 000000000..5a41e3bb5 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/handshakes/xx.ts @@ -0,0 +1,186 @@ +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc' +import { isValidPublicKey } from '../utils.js' +import { AbstractHandshake, type DecryptedResult } from './abstract-handshake.js' +import type { bytes32, bytes } from '../@types/basic.js' +import type { CipherState, HandshakeState, MessageBuffer, NoiseSession } from '../@types/handshake.js' +import type { KeyPair } from '../@types/libp2p.js' +import type { Uint8ArrayList } from 'uint8arraylist' + +export class XX extends AbstractHandshake { + private initializeInitiator (prologue: bytes32, s: KeyPair, rs: bytes32, psk: bytes32): HandshakeState { + const name = 'Noise_XX_25519_ChaChaPoly_SHA256' + const ss = this.initializeSymmetric(name) + this.mixHash(ss, prologue) + const re = uint8ArrayAlloc(32) + + return { ss, s, rs, psk, re } + } + + private initializeResponder (prologue: bytes32, s: KeyPair, rs: bytes32, psk: bytes32): HandshakeState { + const name = 'Noise_XX_25519_ChaChaPoly_SHA256' + const ss = this.initializeSymmetric(name) + this.mixHash(ss, prologue) + const re = uint8ArrayAlloc(32) + + return { ss, s, rs, psk, re } + } + + private writeMessageA (hs: HandshakeState, payload: bytes, e?: KeyPair): MessageBuffer { + const ns = uint8ArrayAlloc(0) + + if (e !== undefined) { + hs.e = e + } else { + hs.e = this.crypto.generateX25519KeyPair() + } + + const ne = hs.e.publicKey + + this.mixHash(hs.ss, ne) + const ciphertext = this.encryptAndHash(hs.ss, payload) + + return { ne, ns, ciphertext } + } + + private writeMessageB (hs: HandshakeState, payload: bytes): MessageBuffer { + hs.e = this.crypto.generateX25519KeyPair() + const ne = hs.e.publicKey + this.mixHash(hs.ss, ne) + + this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.re)) + const spk = hs.s.publicKey + const ns = this.encryptAndHash(hs.ss, spk) + + this.mixKey(hs.ss, this.dh(hs.s.privateKey, hs.re)) + const ciphertext = this.encryptAndHash(hs.ss, payload) + + return { ne, ns, ciphertext } + } + + private writeMessageC (hs: HandshakeState, payload: bytes): { messageBuffer: MessageBuffer, cs1: CipherState, cs2: CipherState, h: bytes } { + const spk = hs.s.publicKey + const ns = this.encryptAndHash(hs.ss, spk) + this.mixKey(hs.ss, this.dh(hs.s.privateKey, hs.re)) + const ciphertext = this.encryptAndHash(hs.ss, payload) + const ne = this.createEmptyKey() + const messageBuffer: MessageBuffer = { ne, ns, ciphertext } + const { cs1, cs2 } = this.split(hs.ss) + + return { h: hs.ss.h, messageBuffer, cs1, cs2 } + } + + private readMessageA (hs: HandshakeState, message: MessageBuffer): DecryptedResult { + if (isValidPublicKey(message.ne)) { + hs.re = message.ne + } + + this.mixHash(hs.ss, hs.re) + return this.decryptAndHash(hs.ss, message.ciphertext) + } + + private readMessageB (hs: HandshakeState, message: MessageBuffer): DecryptedResult { + if (isValidPublicKey(message.ne)) { + hs.re = message.ne + } + + this.mixHash(hs.ss, hs.re) + if (!hs.e) { + throw new Error('Handshake state `e` param is missing.') + } + this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.re)) + const { plaintext: ns, valid: valid1 } = this.decryptAndHash(hs.ss, message.ns) + if (valid1 && isValidPublicKey(ns)) { + hs.rs = ns + } + this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.rs)) + const { plaintext, valid: valid2 } = this.decryptAndHash(hs.ss, message.ciphertext) + return { plaintext, valid: (valid1 && valid2) } + } + + private readMessageC (hs: HandshakeState, message: MessageBuffer): { h: bytes, plaintext: Uint8Array | Uint8ArrayList, valid: boolean, cs1: CipherState, cs2: CipherState } { + const { plaintext: ns, valid: valid1 } = this.decryptAndHash(hs.ss, message.ns) + if (valid1 && isValidPublicKey(ns)) { + hs.rs = ns + } + if (!hs.e) { + throw new Error('Handshake state `e` param is missing.') + } + this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.rs)) + + const { plaintext, valid: valid2 } = this.decryptAndHash(hs.ss, message.ciphertext) + const { cs1, cs2 } = this.split(hs.ss) + + return { h: hs.ss.h, plaintext, valid: (valid1 && valid2), cs1, cs2 } + } + + public initSession (initiator: boolean, prologue: bytes32, s: KeyPair): NoiseSession { + const psk = this.createEmptyKey() + const rs = uint8ArrayAlloc(32) // no static key yet + let hs + + if (initiator) { + hs = this.initializeInitiator(prologue, s, rs, psk) + } else { + hs = this.initializeResponder(prologue, s, rs, psk) + } + + return { + hs, + i: initiator, + mc: 0 + } + } + + public sendMessage (session: NoiseSession, message: bytes, ephemeral?: KeyPair): MessageBuffer { + let messageBuffer: MessageBuffer + if (session.mc === 0) { + messageBuffer = this.writeMessageA(session.hs, message, ephemeral) + } else if (session.mc === 1) { + messageBuffer = this.writeMessageB(session.hs, message) + } else if (session.mc === 2) { + const { h, messageBuffer: resultingBuffer, cs1, cs2 } = this.writeMessageC(session.hs, message) + messageBuffer = resultingBuffer + session.h = h + session.cs1 = cs1 + session.cs2 = cs2 + } else if (session.mc > 2) { + if (session.i) { + if (!session.cs1) { + throw new Error('CS1 (cipher state) is not defined') + } + + messageBuffer = this.writeMessageRegular(session.cs1, message) + } else { + if (!session.cs2) { + throw new Error('CS2 (cipher state) is not defined') + } + + messageBuffer = this.writeMessageRegular(session.cs2, message) + } + } else { + throw new Error('Session invalid.') + } + + session.mc++ + return messageBuffer + } + + public recvMessage (session: NoiseSession, message: MessageBuffer): DecryptedResult { + let plaintext: Uint8Array | Uint8ArrayList = uint8ArrayAlloc(0) + let valid = false + if (session.mc === 0) { + ({ plaintext, valid } = this.readMessageA(session.hs, message)) + } else if (session.mc === 1) { + ({ plaintext, valid } = this.readMessageB(session.hs, message)) + } else if (session.mc === 2) { + const { h, plaintext: resultingPlaintext, valid: resultingValid, cs1, cs2 } = this.readMessageC(session.hs, message) + plaintext = resultingPlaintext + valid = resultingValid + session.h = h + session.cs1 = cs1 + session.cs2 = cs2 + } + session.mc++ + return { plaintext, valid } + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/index.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/index.ts new file mode 100644 index 000000000..c4397f08a --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/index.ts @@ -0,0 +1,15 @@ +import { Noise } from './noise.js' +import type { NoiseInit } from './noise.js' +import type { NoiseExtensions } from './proto/payload.js' +import type { ComponentLogger, ConnectionEncrypter, Metrics } from '@libp2p/interface' +export type { ICryptoInterface } from './crypto.js' +export { pureJsCrypto } from './crypto/js.js' + +export interface NoiseComponents { + logger: ComponentLogger + metrics?: Metrics +} + +export function noise (init: NoiseInit = {}): (components: NoiseComponents) => ConnectionEncrypter { + return (components: NoiseComponents) => new Noise(components, init) +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/logger.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/logger.ts new file mode 100644 index 000000000..c57b456fa --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/logger.ts @@ -0,0 +1,57 @@ +import { toString as uint8ArrayToString } from 'uint8arrays/to-string' +import { DUMP_SESSION_KEYS } from './constants.js' +import type { NoiseSession } from './@types/handshake.js' +import type { KeyPair } from './@types/libp2p.js' +import type { Logger } from '@libp2p/interface' +import type { Uint8ArrayList } from 'uint8arraylist' + +export function logLocalStaticKeys (s: KeyPair, keyLogger: Logger): void { + if (!keyLogger.enabled || !DUMP_SESSION_KEYS) { + return + } + + keyLogger(`LOCAL_STATIC_PUBLIC_KEY ${uint8ArrayToString(s.publicKey, 'hex')}`) + keyLogger(`LOCAL_STATIC_PRIVATE_KEY ${uint8ArrayToString(s.privateKey, 'hex')}`) +} + +export function logLocalEphemeralKeys (e: KeyPair | undefined, keyLogger: Logger): void { + if (!keyLogger.enabled || !DUMP_SESSION_KEYS) { + return + } + + if (e) { + keyLogger(`LOCAL_PUBLIC_EPHEMERAL_KEY ${uint8ArrayToString(e.publicKey, 'hex')}`) + keyLogger(`LOCAL_PRIVATE_EPHEMERAL_KEY ${uint8ArrayToString(e.privateKey, 'hex')}`) + } else { + keyLogger('Missing local ephemeral keys.') + } +} + +export function logRemoteStaticKey (rs: Uint8Array | Uint8ArrayList, keyLogger: Logger): void { + if (!keyLogger.enabled || !DUMP_SESSION_KEYS) { + return + } + + keyLogger(`REMOTE_STATIC_PUBLIC_KEY ${uint8ArrayToString(rs.subarray(), 'hex')}`) +} + +export function logRemoteEphemeralKey (re: Uint8Array | Uint8ArrayList, keyLogger: Logger): void { + if (!keyLogger.enabled || !DUMP_SESSION_KEYS) { + return + } + + keyLogger(`REMOTE_EPHEMERAL_PUBLIC_KEY ${uint8ArrayToString(re.subarray(), 'hex')}`) +} + +export function logCipherState (session: NoiseSession, keyLogger: Logger): void { + if (!keyLogger.enabled || !DUMP_SESSION_KEYS) { + return + } + + if (session.cs1 && session.cs2) { + keyLogger(`CIPHER_STATE_1 ${session.cs1.n.getUint64()} ${uint8ArrayToString(session.cs1.k, 'hex')}`) + keyLogger(`CIPHER_STATE_2 ${session.cs2.n.getUint64()} ${uint8ArrayToString(session.cs2.k, 'hex')}`) + } else { + keyLogger('Missing cipher state.') + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/metrics.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/metrics.ts new file mode 100644 index 000000000..3733d4192 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/metrics.ts @@ -0,0 +1,32 @@ +import type { Counter, Metrics } from '@libp2p/interface' + +export type MetricsRegistry = Record + +export function registerMetrics (metrics: Metrics): MetricsRegistry { + return { + xxHandshakeSuccesses: metrics.registerCounter( + 'libp2p_noise_xxhandshake_successes_total', { + help: 'Total count of noise xxHandshakes successes_' + }), + + xxHandshakeErrors: metrics.registerCounter( + 'libp2p_noise_xxhandshake_error_total', { + help: 'Total count of noise xxHandshakes errors' + }), + + encryptedPackets: metrics.registerCounter( + 'libp2p_noise_encrypted_packets_total', { + help: 'Total count of noise encrypted packets successfully' + }), + + decryptedPackets: metrics.registerCounter( + 'libp2p_noise_decrypted_packets_total', { + help: 'Total count of noise decrypted packets' + }), + + decryptErrors: metrics.registerCounter( + 'libp2p_noise_decrypt_errors_total', { + help: 'Total count of noise decrypt errors' + }) + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/noise.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/noise.ts new file mode 100644 index 000000000..1313691ae --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/noise.ts @@ -0,0 +1,202 @@ +import { decode } from 'it-length-prefixed' +import { lpStream, type LengthPrefixedStream } from 'it-length-prefixed-stream' +import { duplexPair } from 'it-pair/duplex' +import { pipe } from 'it-pipe' +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc' +import { NOISE_MSG_MAX_LENGTH_BYTES } from './constants.js' +import { defaultCrypto } from './crypto/index.js' +import { decryptStream, encryptStream } from './crypto/streaming.js' +import { uint16BEDecode, uint16BEEncode } from './encoder.js' +import { XXHandshake } from './handshake-xx.js' +import { type MetricsRegistry, registerMetrics } from './metrics.js' +import { getPayload } from './utils.js' +import type { bytes } from './@types/basic.js' +import type { IHandshake } from './@types/handshake-interface.js' +import type { INoiseConnection, KeyPair } from './@types/libp2p.js' +import type { ICryptoInterface } from './crypto.js' +import type { NoiseComponents } from './index.js' +import type { NoiseExtensions } from './proto/payload.js' +import type { MultiaddrConnection, SecuredConnection, PeerId } from '@libp2p/interface' +import type { Duplex } from 'it-stream-types' +import type { Uint8ArrayList } from 'uint8arraylist' + +interface HandshakeParams { + connection: LengthPrefixedStream + isInitiator: boolean + localPeer: PeerId + remotePeer?: PeerId +} + +export interface NoiseInit { + /** + * x25519 private key, reuse for faster handshakes + */ + staticNoiseKey?: bytes + extensions?: NoiseExtensions + crypto?: ICryptoInterface + prologueBytes?: Uint8Array +} + +export class Noise implements INoiseConnection { + public protocol = '/noise' + public crypto: ICryptoInterface + + private readonly prologue: Uint8Array + private readonly staticKeys: KeyPair + private readonly extensions?: NoiseExtensions + private readonly metrics?: MetricsRegistry + private readonly components: NoiseComponents + + constructor (components: NoiseComponents, init: NoiseInit = {}) { + const { staticNoiseKey, extensions, crypto, prologueBytes } = init + const { metrics } = components + + this.components = components + this.crypto = crypto ?? defaultCrypto + this.extensions = extensions + this.metrics = metrics ? registerMetrics(metrics) : undefined + + if (staticNoiseKey) { + // accepts x25519 private key of length 32 + this.staticKeys = this.crypto.generateX25519KeyPairFromSeed(staticNoiseKey) + } else { + this.staticKeys = this.crypto.generateX25519KeyPair() + } + this.prologue = prologueBytes ?? uint8ArrayAlloc(0) + } + + /** + * Encrypt outgoing data to the remote party (handshake as initiator) + * + * @param {PeerId} localPeer - PeerId of the receiving peer + * @param {Stream} connection - streaming iterable duplex that will be encrypted + * @param {PeerId} remotePeer - PeerId of the remote peer. Used to validate the integrity of the remote peer. + * @returns {Promise>} + */ + public async secureOutbound > = MultiaddrConnection> (localPeer: PeerId, connection: Stream, remotePeer?: PeerId): Promise> { + const wrappedConnection = lpStream( + connection, + { + lengthEncoder: uint16BEEncode, + lengthDecoder: uint16BEDecode, + maxDataLength: NOISE_MSG_MAX_LENGTH_BYTES + } + ) + const handshake = await this.performHandshake({ + connection: wrappedConnection, + isInitiator: true, + localPeer, + remotePeer + }) + const conn = await this.createSecureConnection(wrappedConnection, handshake) + + connection.source = conn.source + connection.sink = conn.sink + + return { + conn: connection, + remoteExtensions: handshake.remoteExtensions, + remotePeer: handshake.remotePeer + } + } + + /** + * Decrypt incoming data (handshake as responder). + * + * @param {PeerId} localPeer - PeerId of the receiving peer. + * @param {Stream} connection - streaming iterable duplex that will be encrypted. + * @param {PeerId} remotePeer - optional PeerId of the initiating peer, if known. This may only exist during transport upgrades. + * @returns {Promise>} + */ + public async secureInbound > = MultiaddrConnection> (localPeer: PeerId, connection: Stream, remotePeer?: PeerId): Promise> { + const wrappedConnection = lpStream( + connection, + { + lengthEncoder: uint16BEEncode, + lengthDecoder: uint16BEDecode, + maxDataLength: NOISE_MSG_MAX_LENGTH_BYTES + } + ) + const handshake = await this.performHandshake({ + connection: wrappedConnection, + isInitiator: false, + localPeer, + remotePeer + }) + const conn = await this.createSecureConnection(wrappedConnection, handshake) + + connection.source = conn.source + connection.sink = conn.sink + + return { + conn: connection, + remotePeer: handshake.remotePeer, + remoteExtensions: handshake.remoteExtensions + } + } + + /** + * If Noise pipes supported, tries IK handshake first with XX as fallback if it fails. + * If noise pipes disabled or remote peer static key is unknown, use XX. + * + * @param {HandshakeParams} params + */ + private async performHandshake (params: HandshakeParams): Promise { + const payload = await getPayload(params.localPeer, this.staticKeys.publicKey, this.extensions) + + // run XX handshake + return this.performXXHandshake(params, payload) + } + + private async performXXHandshake ( + params: HandshakeParams, + payload: bytes + ): Promise { + const { isInitiator, remotePeer, connection } = params + const handshake = new XXHandshake( + this.components, + isInitiator, + payload, + this.prologue, + this.crypto, + this.staticKeys, + connection, + remotePeer + ) + + try { + await handshake.propose() + await handshake.exchange() + await handshake.finish() + this.metrics?.xxHandshakeSuccesses.increment() + } catch (e: unknown) { + this.metrics?.xxHandshakeErrors.increment() + if (e instanceof Error) { + e.message = `Error occurred during XX handshake: ${e.message}` + throw e + } + } + + return handshake + } + + private async createSecureConnection ( + connection: LengthPrefixedStream>>, + handshake: IHandshake + ): Promise>> { + // Create encryption box/unbox wrapper + const [secure, user] = duplexPair() + const network = connection.unwrap() + + await pipe( + secure, // write to wrapper + encryptStream(handshake, this.metrics), // encrypt data + prefix with message length + network, // send to the remote peer + (source) => decode(source, { lengthDecoder: uint16BEDecode }), // read message length prefix + decryptStream(handshake, this.metrics), // decrypt the incoming data + secure // pipe to the wrapper + ) + + return user + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/nonce.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/nonce.ts new file mode 100644 index 000000000..e19183dd8 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/nonce.ts @@ -0,0 +1,50 @@ +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc' +import type { bytes, uint64 } from './@types/basic.js' + +export const MIN_NONCE = 0 +// For performance reasons, the nonce is represented as a JS `number` +// Although JS `number` can safely represent integers up to 2 ** 53 - 1, we choose to only use +// 4 bytes to store the data for performance reason. +// This is a slight deviation from the noise spec, which describes the max nonce as 2 ** 64 - 2 +// The effect is that this implementation will need a new handshake to be performed after fewer messages are exchanged than other implementations with full uint64 nonces. +// this MAX_NONCE is still a large number of messages, so the practical effect of this is negligible. +export const MAX_NONCE = 0xffffffff + +const ERR_MAX_NONCE = 'Cipherstate has reached maximum n, a new handshake must be performed' + +/** + * The nonce is an uint that's increased over time. + * Maintaining different representations help improve performance. + */ +export class Nonce { + private n: uint64 + private readonly bytes: bytes + private readonly view: DataView + + constructor (n = MIN_NONCE) { + this.n = n + this.bytes = uint8ArrayAlloc(12) + this.view = new DataView(this.bytes.buffer, this.bytes.byteOffset, this.bytes.byteLength) + this.view.setUint32(4, n, true) + } + + increment (): void { + this.n++ + // Even though we're treating the nonce as 8 bytes, RFC7539 specifies 12 bytes for a nonce. + this.view.setUint32(4, this.n, true) + } + + getBytes (): bytes { + return this.bytes + } + + getUint64 (): uint64 { + return this.n + } + + assertValue (): void { + if (this.n > MAX_NONCE) { + throw new Error(ERR_MAX_NONCE) + } + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/proto/payload.proto b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/proto/payload.proto new file mode 100644 index 000000000..cdb2383cb --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/proto/payload.proto @@ -0,0 +1,11 @@ +syntax = "proto3"; + +message NoiseExtensions { + repeated bytes webtransport_certhashes = 1; +} + +message NoiseHandshakePayload { + bytes identity_key = 1; + bytes identity_sig = 2; + optional NoiseExtensions extensions = 4; +} \ No newline at end of file diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/proto/payload.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/proto/payload.ts new file mode 100644 index 000000000..5f8d5100f --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/proto/payload.ts @@ -0,0 +1,152 @@ +/* eslint-disable import/export */ +/* eslint-disable complexity */ +/* eslint-disable @typescript-eslint/no-namespace */ +/* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */ +/* eslint-disable @typescript-eslint/no-empty-interface */ + +import { type Codec, decodeMessage, encodeMessage, message } from 'protons-runtime' +import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc' +import type { Uint8ArrayList } from 'uint8arraylist' + +export interface NoiseExtensions { + webtransportCerthashes: Uint8Array[] +} + +export namespace NoiseExtensions { + let _codec: Codec + + export const codec = (): Codec => { + if (_codec == null) { + _codec = message((obj, w, opts = {}) => { + if (opts.lengthDelimited !== false) { + w.fork() + } + + if (obj.webtransportCerthashes != null) { + for (const value of obj.webtransportCerthashes) { + w.uint32(10) + w.bytes(value) + } + } + + if (opts.lengthDelimited !== false) { + w.ldelim() + } + }, (reader, length) => { + const obj: any = { + webtransportCerthashes: [] + } + + const end = length == null ? reader.len : reader.pos + length + + while (reader.pos < end) { + const tag = reader.uint32() + + switch (tag >>> 3) { + case 1: { + obj.webtransportCerthashes.push(reader.bytes()) + break + } + default: { + reader.skipType(tag & 7) + break + } + } + } + + return obj + }) + } + + return _codec + } + + export const encode = (obj: Partial): Uint8Array => { + return encodeMessage(obj, NoiseExtensions.codec()) + } + + export const decode = (buf: Uint8Array | Uint8ArrayList): NoiseExtensions => { + return decodeMessage(buf, NoiseExtensions.codec()) + } +} + +export interface NoiseHandshakePayload { + identityKey: Uint8Array + identitySig: Uint8Array + extensions?: NoiseExtensions +} + +export namespace NoiseHandshakePayload { + let _codec: Codec + + export const codec = (): Codec => { + if (_codec == null) { + _codec = message((obj, w, opts = {}) => { + if (opts.lengthDelimited !== false) { + w.fork() + } + + if ((obj.identityKey != null && obj.identityKey.byteLength > 0)) { + w.uint32(10) + w.bytes(obj.identityKey) + } + + if ((obj.identitySig != null && obj.identitySig.byteLength > 0)) { + w.uint32(18) + w.bytes(obj.identitySig) + } + + if (obj.extensions != null) { + w.uint32(34) + NoiseExtensions.codec().encode(obj.extensions, w) + } + + if (opts.lengthDelimited !== false) { + w.ldelim() + } + }, (reader, length) => { + const obj: any = { + identityKey: uint8ArrayAlloc(0), + identitySig: uint8ArrayAlloc(0) + } + + const end = length == null ? reader.len : reader.pos + length + + while (reader.pos < end) { + const tag = reader.uint32() + + switch (tag >>> 3) { + case 1: { + obj.identityKey = reader.bytes() + break + } + case 2: { + obj.identitySig = reader.bytes() + break + } + case 4: { + obj.extensions = NoiseExtensions.codec().decode(reader, reader.uint32()) + break + } + default: { + reader.skipType(tag & 7) + break + } + } + } + + return obj + }) + } + + return _codec + } + + export const encode = (obj: Partial): Uint8Array => { + return encodeMessage(obj, NoiseHandshakePayload.codec()) + } + + export const decode = (buf: Uint8Array | Uint8ArrayList): NoiseHandshakePayload => { + return decodeMessage(buf, NoiseHandshakePayload.codec()) + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/utils.ts b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/utils.ts new file mode 100644 index 000000000..d6fc84939 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/noise/src/utils.ts @@ -0,0 +1,119 @@ +import { unmarshalPublicKey, unmarshalPrivateKey } from '@libp2p/crypto/keys' +import { peerIdFromKeys } from '@libp2p/peer-id' +import { type Uint8ArrayList, isUint8ArrayList } from 'uint8arraylist' +import { concat as uint8ArrayConcat } from 'uint8arrays/concat' +import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string' +import { type NoiseExtensions, NoiseHandshakePayload } from './proto/payload.js' +import type { bytes } from './@types/basic.js' +import type { PeerId } from '@libp2p/interface' + +export async function getPayload ( + localPeer: PeerId, + staticPublicKey: bytes, + extensions?: NoiseExtensions +): Promise { + const signedPayload = await signPayload(localPeer, getHandshakePayload(staticPublicKey)) + + if (localPeer.publicKey == null) { + throw new Error('PublicKey was missing from local PeerId') + } + + return createHandshakePayload( + localPeer.publicKey, + signedPayload, + extensions + ) +} + +export function createHandshakePayload ( + libp2pPublicKey: Uint8Array, + signedPayload: Uint8Array, + extensions?: NoiseExtensions +): bytes { + return NoiseHandshakePayload.encode({ + identityKey: libp2pPublicKey, + identitySig: signedPayload, + extensions: extensions ?? { webtransportCerthashes: [] } + }).subarray() +} + +export async function signPayload (peerId: PeerId, payload: Uint8Array | Uint8ArrayList): Promise { + if (peerId.privateKey == null) { + throw new Error('PrivateKey was missing from PeerId') + } + + const privateKey = await unmarshalPrivateKey(peerId.privateKey) + + return privateKey.sign(payload) +} + +export async function getPeerIdFromPayload (payload: NoiseHandshakePayload): Promise { + return peerIdFromKeys(payload.identityKey) +} + +export function decodePayload (payload: Uint8Array | Uint8ArrayList): NoiseHandshakePayload { + return NoiseHandshakePayload.decode(payload) +} + +export function getHandshakePayload (publicKey: Uint8Array | Uint8ArrayList): Uint8Array | Uint8ArrayList { + const prefix = uint8ArrayFromString('noise-libp2p-static-key:') + + if (publicKey instanceof Uint8Array) { + return uint8ArrayConcat([prefix, publicKey], prefix.length + publicKey.length) + } + + publicKey.prepend(prefix) + + return publicKey +} + +/** + * Verifies signed payload, throws on any irregularities. + * + * @param {bytes} noiseStaticKey - owner's noise static key + * @param {bytes} payload - decoded payload + * @param {PeerId} remotePeer - owner's libp2p peer ID + * @returns {Promise} - peer ID of payload owner + */ +export async function verifySignedPayload ( + noiseStaticKey: Uint8Array | Uint8ArrayList, + payload: NoiseHandshakePayload, + remotePeer: PeerId +): Promise { + // Unmarshaling from PublicKey protobuf + const payloadPeerId = await peerIdFromKeys(payload.identityKey) + if (!payloadPeerId.equals(remotePeer)) { + throw new Error(`Payload identity key ${payloadPeerId.toString()} does not match expected remote peer ${remotePeer.toString()}`) + } + const generatedPayload = getHandshakePayload(noiseStaticKey) + + if (payloadPeerId.publicKey == null) { + throw new Error('PublicKey was missing from PeerId') + } + + if (payload.identitySig == null) { + throw new Error('Signature was missing from message') + } + + const publicKey = unmarshalPublicKey(payloadPeerId.publicKey) + + const valid = await publicKey.verify(generatedPayload, payload.identitySig) + + if (!valid) { + throw new Error("Static key doesn't match to peer that signed payload!") + } + + return payloadPeerId +} + +export function isValidPublicKey (pk: Uint8Array | Uint8ArrayList): boolean { + if (!(pk instanceof Uint8Array) && !(isUint8ArrayList(pk))) { + return false + } + + if (pk.byteLength !== 32) { + return false + } + + return true +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/package-lock.json b/perf/impl/js-libp2p/v1.0-noise-alloc/package-lock.json new file mode 100644 index 000000000..1e9ef02e1 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/package-lock.json @@ -0,0 +1,911 @@ +{ + "name": "@libp2p/perf-js-libp2p-1-0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@libp2p/perf-js-libp2p-1-0", + "dependencies": { + "@chainsafe/libp2p-noise": "file:./noise", + "@chainsafe/libp2p-yamux": "^6.0.1", + "@libp2p/perf": "^3.0.4", + "@libp2p/tcp": "^9.0.4", + "libp2p": "^1.0.5" + } + }, + "node_modules/@chainsafe/as-chacha20poly1305": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@chainsafe/as-chacha20poly1305/-/as-chacha20poly1305-0.1.0.tgz", + "integrity": "sha512-BpNcL8/lji/GM3+vZ/bgRWqJ1q5kwvTFmGPk7pxm/QQZDbaMI98waOHjEymTjq2JmdD/INdNBFOVSyJofXg7ew==" + }, + "node_modules/@chainsafe/as-sha256": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.4.1.tgz", + "integrity": "sha512-IqeeGwQihK6Y2EYLFofqs2eY2ep1I2MvQXHzOAI+5iQN51OZlUkrLgyAugu2x86xZewDk5xas7lNczkzFzF62w==" + }, + "node_modules/@chainsafe/is-ip": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@chainsafe/is-ip/-/is-ip-2.0.2.tgz", + "integrity": "sha512-ndGqEMG1W5WkGagaqOZHpPU172AGdxr+LD15sv3WIUvT5oCFUrG1Y0CW/v2Egwj4JXEvSibaIIIqImsm98y1nA==" + }, + "node_modules/@chainsafe/libp2p-noise": { + "resolved": "noise", + "link": true + }, + "node_modules/@chainsafe/libp2p-yamux": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-yamux/-/libp2p-yamux-6.0.1.tgz", + "integrity": "sha512-8ar6jph9ZuUUxQ8t8W1MaZqH7f7KvGK2wR7TDGnN0r4QtZc07ICNgVjnolnI9/8bclrI5Um4uMa8QCYKTrdvDQ==", + "dependencies": { + "@libp2p/interface": "^1.0.0", + "@libp2p/utils": "^5.0.0", + "get-iterator": "^2.0.1", + "it-foreach": "^2.0.3", + "it-pipe": "^3.0.1", + "it-pushable": "^3.2.0", + "uint8arraylist": "^2.4.3" + } + }, + "node_modules/@chainsafe/netmask": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@chainsafe/netmask/-/netmask-2.0.0.tgz", + "integrity": "sha512-I3Z+6SWUoaljh3TBzCnCxjlUyN8tA+NAk5L6m9IxvCf1BENQTePzPMis97CoN/iMW1St3WN+AWCCRp+TTBRiDg==", + "dependencies": { + "@chainsafe/is-ip": "^2.0.1" + } + }, + "node_modules/@libp2p/crypto": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-3.0.1.tgz", + "integrity": "sha512-CvqzsWvAYaga/Du3gDRChN9d8PUnOoCQg3VlugKf6tfw5+1pd7sMDhyMLajXqFsWqQUY6FojgB1TS4izpODMpw==", + "dependencies": { + "@libp2p/interface": "^1.0.1", + "@noble/curves": "^1.1.0", + "@noble/hashes": "^1.3.1", + "multiformats": "^12.1.3", + "node-forge": "^1.1.0", + "protons-runtime": "^5.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@libp2p/interface": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-1.0.1.tgz", + "integrity": "sha512-TRo1YxJ+AVjt5ms+mTOp8xcoCis5HAUMzv0XfCvxtIw77Bog6TPR5VdkGutlEQOKUMzXtLP0lW88fTQBeiiOnA==", + "dependencies": { + "@multiformats/multiaddr": "^12.1.10", + "it-pushable": "^3.2.1", + "it-stream-types": "^2.0.1", + "multiformats": "^12.1.3", + "uint8arraylist": "^2.4.3" + } + }, + "node_modules/@libp2p/interface-internal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-internal/-/interface-internal-1.0.1.tgz", + "integrity": "sha512-mJ2uWPzjnIk9Y1/Ca/xk0coz8PCg8tnAQgxN+GNG0cdAbY6Wu7dNDm0P3aTh9NYfjCp+5nzSSEE2UW/nr7TB9Q==", + "dependencies": { + "@libp2p/interface": "^1.0.1", + "@libp2p/peer-collections": "^5.0.0", + "@multiformats/multiaddr": "^12.1.10", + "uint8arraylist": "^2.4.3" + } + }, + "node_modules/@libp2p/logger": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-4.0.1.tgz", + "integrity": "sha512-d7kJmbkphNvEI3Da4so+4nxUJhwW/T/d8Pd+aQIuT27RYNeVoRfkFkjYwPIP+NvJXtU4LDju7VDPLbPbU2zFGA==", + "dependencies": { + "@libp2p/interface": "^1.0.1", + "@multiformats/multiaddr": "^12.1.10", + "debug": "^4.3.4", + "interface-datastore": "^8.2.0", + "multiformats": "^12.1.3" + } + }, + "node_modules/@libp2p/multistream-select": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/multistream-select/-/multistream-select-5.0.0.tgz", + "integrity": "sha512-1y4b8he9djNQYteKFRnDisryOGV70SQOaSuiNJgKaIPFFJ9DwYbz/ZCV0k0Ld4zqB4Ncm8ibBmyYuZg+yoOBuQ==", + "dependencies": { + "@libp2p/interface": "^1.0.1", + "it-length-prefixed": "^9.0.3", + "it-length-prefixed-stream": "^1.1.1", + "it-pipe": "^3.0.1", + "it-stream-types": "^2.0.1", + "p-defer": "^4.0.0", + "uint8-varint": "^2.0.2", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@libp2p/peer-collections": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-5.0.0.tgz", + "integrity": "sha512-2h6BF6t68TxnsErZrPzkMapH0GpZSCmOaimUMidrs9oSnxIMf62QnNAbfar8U2XbXnPJD9WkEicnSuJgDwg8Vw==", + "dependencies": { + "@libp2p/interface": "^1.0.1", + "@libp2p/peer-id": "^4.0.1" + } + }, + "node_modules/@libp2p/peer-id": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-4.0.1.tgz", + "integrity": "sha512-rEgZ4YPSVh7gqIXxWE9HVw318Og8fJohI2vWXNx2h+Ib/iMQTGrqGgSaJhjUMWYIy8MadpjofCPXObPEIX3E3g==", + "dependencies": { + "@libp2p/interface": "^1.0.1", + "multiformats": "^12.1.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@libp2p/peer-id-factory": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id-factory/-/peer-id-factory-4.0.0.tgz", + "integrity": "sha512-dFbQOpxqEw4CqV+ZalMc5UABqts+hskMoaqytjmR55pXgL4KDamOyg7hBT/HrHRp2sStf8E2vwQ5wnjv1W9uFQ==", + "dependencies": { + "@libp2p/crypto": "^3.0.1", + "@libp2p/interface": "^1.0.1", + "@libp2p/peer-id": "^4.0.1", + "multiformats": "^12.1.3", + "protons-runtime": "^5.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@libp2p/peer-record": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-7.0.0.tgz", + "integrity": "sha512-Kr5XgyRzqJjK4rBu+QA2e2zGT59rp2OKD8kviwpE4NwKWyDs85JaRduorso9KujJG/F0uZI8tOhPjadO1Lwatw==", + "dependencies": { + "@libp2p/crypto": "^3.0.1", + "@libp2p/interface": "^1.0.1", + "@libp2p/peer-id": "^4.0.1", + "@libp2p/utils": "^5.0.2", + "@multiformats/multiaddr": "^12.1.10", + "protons-runtime": "^5.0.0", + "uint8-varint": "^2.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@libp2p/peer-store": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/peer-store/-/peer-store-10.0.0.tgz", + "integrity": "sha512-DQilgZXfwokKTbr1EDQssIfn5bAMLCEUronhqy9VEIrF7mkiSqjsBtOcftDEJT4dXhDOV8F7mifznvJI32tZIA==", + "dependencies": { + "@libp2p/interface": "^1.0.1", + "@libp2p/peer-collections": "^5.0.0", + "@libp2p/peer-id": "^4.0.1", + "@libp2p/peer-id-factory": "^4.0.0", + "@libp2p/peer-record": "^7.0.0", + "@multiformats/multiaddr": "^12.1.10", + "interface-datastore": "^8.2.0", + "it-all": "^3.0.2", + "mortice": "^3.0.1", + "multiformats": "^12.1.3", + "protons-runtime": "^5.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@libp2p/perf": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/perf/-/perf-3.0.4.tgz", + "integrity": "sha512-keoLx6WkhWn+W5IA6Y4m/N1JxfLdpReXdDmrNMDwoLFsymWI0KmCUq/wQRT3l2T+xRlSPthg+Q7/QabJDSU3ig==", + "dependencies": { + "@libp2p/interface": "^1.0.1", + "@libp2p/interface-internal": "^1.0.1", + "@multiformats/multiaddr": "^12.1.10", + "it-pushable": "^3.2.3" + } + }, + "node_modules/@libp2p/tcp": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/tcp/-/tcp-9.0.4.tgz", + "integrity": "sha512-q3wAZMhEUXIEKnHPPHEjcO564P7pIkCWazC8SUGIPRLbmuSnni8cT2kd/Jx6xSv5ZOK2LHzJSKodLlpfi1Gmzg==", + "dependencies": { + "@libp2p/interface": "^1.0.1", + "@libp2p/utils": "^5.0.2", + "@multiformats/mafmt": "^12.1.6", + "@multiformats/multiaddr": "^12.1.10", + "@types/sinon": "^17.0.0", + "stream-to-it": "^0.2.2" + } + }, + "node_modules/@libp2p/utils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-5.0.2.tgz", + "integrity": "sha512-PcDAH8pwtXq0pfoO9arHtg3CsqF+reheUd0OaQ9/Fn0YjjNpqcpseQyByBiwhiuQsauWo5RU+CKqRaRdvXKemA==", + "dependencies": { + "@chainsafe/is-ip": "^2.0.2", + "@libp2p/interface": "^1.0.1", + "@multiformats/multiaddr": "^12.1.10", + "@multiformats/multiaddr-matcher": "^1.1.0", + "get-iterator": "^2.0.1", + "is-loopback-addr": "^2.0.1", + "it-pushable": "^3.2.2", + "it-stream-types": "^2.0.1", + "p-queue": "^7.4.1", + "private-ip": "^3.0.1", + "race-signal": "^1.0.1", + "uint8arraylist": "^2.4.3" + } + }, + "node_modules/@multiformats/mafmt": { + "version": "12.1.6", + "resolved": "https://registry.npmjs.org/@multiformats/mafmt/-/mafmt-12.1.6.tgz", + "integrity": "sha512-tlJRfL21X+AKn9b5i5VnaTD6bNttpSpcqwKVmDmSHLwxoz97fAHaepqFOk/l1fIu94nImIXneNbhsJx/RQNIww==", + "dependencies": { + "@multiformats/multiaddr": "^12.0.0" + } + }, + "node_modules/@multiformats/multiaddr": { + "version": "12.1.11", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.1.11.tgz", + "integrity": "sha512-CWG9kETEGTTMdr1T+/JEuMwFld3r3fHNP8LkLoUcLvHRy6yr8sWdotVGEDNEdDO/vrKhuD7bQBws3xMSMMyylg==", + "dependencies": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/interface": "^1.0.0", + "dns-over-http-resolver": "3.0.0", + "multiformats": "^12.0.1", + "uint8-varint": "^2.0.1", + "uint8arrays": "^4.0.2" + } + }, + "node_modules/@multiformats/multiaddr-matcher": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-matcher/-/multiaddr-matcher-1.1.0.tgz", + "integrity": "sha512-B/QbKpAxaHYVXFnbTdTgYqPDxmqoF2RYffwYoOv1MWfi2vBCZLdzmEKUBKv6fQr6s+LJFSHn2j2vczmwMFCQIA==", + "dependencies": { + "@chainsafe/is-ip": "^2.0.1", + "@multiformats/multiaddr": "^12.0.0", + "multiformats": "^12.0.1" + } + }, + "node_modules/@noble/ciphers": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.4.0.tgz", + "integrity": "sha512-xaUaUUDWbHIFSxaQ/pIe+33VG2mfJp6N/KxKLmZr5biWdNznCAmfu24QRhX10BbVAuqOahAoyp0S4M9md6GPDw==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@types/sinon": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.2.tgz", + "integrity": "sha512-Zt6heIGsdqERkxctIpvN5Pv3edgBrhoeb3yHyxffd4InN0AX2SVNKSrhdDZKGQICVOxWP/q4DyhpfPNMSrpIiA==", + "dependencies": { + "@types/sinonjs__fake-timers": "*" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", + "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==" + }, + "node_modules/any-signal": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-4.1.1.tgz", + "integrity": "sha512-iADenERppdC+A2YKbOXXB2WUeABLaM6qnpZ70kZbPZ1cZMMJ7eF+3CaYm+/PhBizgkzlvssC7QuHS30oOiQYWA==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/datastore-core": { + "version": "9.2.5", + "resolved": "https://registry.npmjs.org/datastore-core/-/datastore-core-9.2.5.tgz", + "integrity": "sha512-3Z54iBjwj4KDp5Se4aZRYWnjv1OlQgPfrEF2X+T9rlet8Pe3AKRLVYx0v+11PuL+47d7w0Vc/4847Ylas6fEbQ==", + "dependencies": { + "@libp2p/logger": "^4.0.1", + "err-code": "^3.0.1", + "interface-store": "^5.0.0", + "it-all": "^3.0.1", + "it-drain": "^3.0.1", + "it-filter": "^3.0.0", + "it-map": "^3.0.1", + "it-merge": "^3.0.1", + "it-pipe": "^3.0.0", + "it-pushable": "^3.0.0", + "it-sort": "^3.0.1", + "it-take": "^3.0.1", + "uint8arrays": "^4.0.2" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/delay": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/delay/-/delay-6.0.0.tgz", + "integrity": "sha512-2NJozoOHQ4NuZuVIr5CWd0iiLVIRSDepakaovIN+9eIDHEhdCAEvSy2cuf1DCrPPQLvHmbqTHODlhHg8UCy4zw==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dns-over-http-resolver": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-3.0.0.tgz", + "integrity": "sha512-5+BI+B7n8LKhNaEZBYErr+CBd9t5nYtjunByLhrLGtZ+i3TRgiU8yE87pCjEBu2KOwNsD9ljpSXEbZ4S8xih5g==", + "dependencies": { + "debug": "^4.3.4", + "receptacle": "^1.3.2" + } + }, + "node_modules/err-code": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", + "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "node_modules/get-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.1.tgz", + "integrity": "sha512-7HuY/hebu4gryTDT7O/XY/fvY9wRByEGdK6QOa4of8npTcv0+NS6frFKABcf6S9EBAsveTuKTsZQQBFMMNILIg==" + }, + "node_modules/interface-datastore": { + "version": "8.2.7", + "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-8.2.7.tgz", + "integrity": "sha512-ot5B5+VogufRfjhedAXZHm5NuEKyYZkDyVpTjBYIrxYUpS5GIfF2soE/dsd/FiBVqubcxa4IEToMXL5ruMwhjw==", + "dependencies": { + "interface-store": "^5.0.0", + "nanoid": "^5.0.3", + "uint8arrays": "^4.0.2" + } + }, + "node_modules/interface-store": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-5.1.5.tgz", + "integrity": "sha512-X0KnJBk3o+YL13MxZBMwa88/b3Mdrpm0yPzkSTKDDVn9BSPH7UK6W+ZtIPO2bxKOQVmq7zqOwAnYnpfqWjb6/g==" + }, + "node_modules/ip-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz", + "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-electron": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz", + "integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==" + }, + "node_modules/is-loopback-addr": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.2.tgz", + "integrity": "sha512-26POf2KRCno/KTNL5Q0b/9TYnL00xEsSaLfiFRmjM7m7Lw7ZMmFybzzuX4CcsLAluZGd+niLUiMRxEooVE3aqg==" + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/it-all": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/it-all/-/it-all-3.0.4.tgz", + "integrity": "sha512-UMiy0i9DqCHBdWvMbzdYvVGa5/w4t1cc4nchpbnjdLhklglv8mQeEYnii0gvKESJuL1zV32Cqdb33R6/GPfxpQ==" + }, + "node_modules/it-byte-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/it-byte-stream/-/it-byte-stream-1.0.5.tgz", + "integrity": "sha512-wGHbXPE0ZiU0poJTgCNOW06+mh9yyCwdF8bVv0zxchgql6CMQd/2NEXXtmwWE+N65st8bi/KWUWcMU2pJU2fEw==", + "dependencies": { + "it-stream-types": "^2.0.1", + "p-defer": "^4.0.0", + "race-signal": "^1.0.1", + "uint8arraylist": "^2.4.1" + } + }, + "node_modules/it-drain": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/it-drain/-/it-drain-3.0.5.tgz", + "integrity": "sha512-qYFe4SWdvs9oJGUY5bSjvmiLUMLzFEODNOQUdYdCIkuIgQF+AUB2INhM4yQ09buJ2rhHKDFxvTD/+yUq6qg0XA==" + }, + "node_modules/it-filter": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/it-filter/-/it-filter-3.0.4.tgz", + "integrity": "sha512-e0sz+st4sudK/zH6GZ/gRTRP8A/ADuJFCYDmRgMbZvR79y5+v4ZXav850bBZk5wL9zXaYZFxS1v/6Qi+Vjwh5g==", + "dependencies": { + "it-peekable": "^3.0.0" + } + }, + "node_modules/it-first": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/it-first/-/it-first-3.0.4.tgz", + "integrity": "sha512-FtQl84iTNxN5EItP/JgL28V2rzNMkCzTUlNoj41eVdfix2z1DBuLnBqZ0hzYhGGa1rMpbQf0M7CQSA2adlrLJg==" + }, + "node_modules/it-foreach": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/it-foreach/-/it-foreach-2.0.6.tgz", + "integrity": "sha512-OVosBHJsdXpAyeFlCbe3IGZia+65UykyAznakNsKXK+b99dbhuu/mOnXxTadDEo1GWhKx+WA8RNanKkMf07zQw==", + "dependencies": { + "it-peekable": "^3.0.0" + } + }, + "node_modules/it-length-prefixed": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-9.0.3.tgz", + "integrity": "sha512-YAu424ceYpXctxtjcLOqn7vJq082CaoP8J646ZusYISfQc3bpzQErgTUqMFj81V262KG2W9/YMBHsy6A/4yvmg==", + "dependencies": { + "err-code": "^3.0.1", + "it-reader": "^6.0.1", + "it-stream-types": "^2.0.1", + "uint8-varint": "^2.0.1", + "uint8arraylist": "^2.0.0", + "uint8arrays": "^4.0.2" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-length-prefixed-stream": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/it-length-prefixed-stream/-/it-length-prefixed-stream-1.1.4.tgz", + "integrity": "sha512-6YcQ5jsaYnuXBqF+oSGjSdSY9jF7HWl7yh+dxYytXxbE2GcdiOpn6pLM7m6AlIID9MCzQqMY5nOzaiatQ8A3/A==", + "dependencies": { + "it-byte-stream": "^1.0.0", + "it-length-prefixed": "^9.0.1", + "it-stream-types": "^2.0.1", + "uint8-varint": "^2.0.1", + "uint8arraylist": "^2.4.1" + } + }, + "node_modules/it-map": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/it-map/-/it-map-3.0.5.tgz", + "integrity": "sha512-hB0TDXo/h4KSJJDSRLgAPmDroiXP6Fx1ck4Bzl3US9hHfZweTKsuiP0y4gXuTMcJlS6vj0bb+f70rhkD47ZA3w==", + "dependencies": { + "it-peekable": "^3.0.0" + } + }, + "node_modules/it-merge": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/it-merge/-/it-merge-3.0.3.tgz", + "integrity": "sha512-FYVU15KC5pb/GQX1Ims+lee8d4pdqGVCpWr0lkNj8o4xuNo7jY71k6GuEiWdP+T7W1bJqewSxX5yoTy5yZpRVA==", + "dependencies": { + "it-pushable": "^3.2.0" + } + }, + "node_modules/it-pair": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/it-pair/-/it-pair-2.0.6.tgz", + "integrity": "sha512-5M0t5RAcYEQYNG5BV7d7cqbdwbCAp5yLdzvkxsZmkuZsLbTdZzah6MQySYfaAQjNDCq6PUnDt0hqBZ4NwMfW6g==", + "dependencies": { + "it-stream-types": "^2.0.1", + "p-defer": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-peekable": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/it-peekable/-/it-peekable-3.0.3.tgz", + "integrity": "sha512-Wx21JX/rMzTEl9flx3DGHuPV1KQFGOl8uoKfQtmZHgPQtGb89eQ6RyVd82h3HuP9Ghpt0WgBDlmmdWeHXqyx7w==" + }, + "node_modules/it-pipe": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-3.0.1.tgz", + "integrity": "sha512-sIoNrQl1qSRg2seYSBH/3QxWhJFn9PKYvOf/bHdtCBF0bnghey44VyASsWzn5dAx0DCDDABq1hZIuzKmtBZmKA==", + "dependencies": { + "it-merge": "^3.0.0", + "it-pushable": "^3.1.2", + "it-stream-types": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-pushable": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.2.3.tgz", + "integrity": "sha512-gzYnXYK8Y5t5b/BnJUr7glfQLO4U5vyb05gPx/TyTw+4Bv1zM9gFk4YsOrnulWefMewlphCjKkakFvj1y99Tcg==", + "dependencies": { + "p-defer": "^4.0.0" + } + }, + "node_modules/it-reader": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-6.0.4.tgz", + "integrity": "sha512-XCWifEcNFFjjBHtor4Sfaj8rcpt+FkY0L6WdhD578SCDhV4VUm7fCkF3dv5a+fTcfQqvN9BsxBTvWbYO6iCjTg==", + "dependencies": { + "it-stream-types": "^2.0.1", + "uint8arraylist": "^2.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-sort": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/it-sort/-/it-sort-3.0.4.tgz", + "integrity": "sha512-tvnC93JZZWjX4UxALy0asow0dzXabkoaRbrPJKClTKhNCqw4gzHr+H5axf1gohcthedRRkqd/ae+wl7WqoxFhw==", + "dependencies": { + "it-all": "^3.0.0" + } + }, + "node_modules/it-stream-types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/it-stream-types/-/it-stream-types-2.0.1.tgz", + "integrity": "sha512-6DmOs5r7ERDbvS4q8yLKENcj6Yecr7QQTqWApbZdfAUTEC947d+PEha7PCqhm//9oxaLYL7TWRekwhoXl2s6fg==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-take": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/it-take/-/it-take-3.0.4.tgz", + "integrity": "sha512-RG8HDjAZlvkzz5Nav4xq6gK5zNT+Ff1UTIf+CrSJW8nIl6N1FpBH5e7clUshiCn+MmmMoSdIEpw4UaTolszxhA==" + }, + "node_modules/libp2p": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-1.0.5.tgz", + "integrity": "sha512-h6JsVRCo31WWNwZxI6T5e0hbBagw6GG2N4u2n1vCpnSyVPZQV64cm3hgMQFuNPHv3e69+ABGq2viHRzrBDAaTw==", + "dependencies": { + "@libp2p/crypto": "^3.0.1", + "@libp2p/interface": "^1.0.1", + "@libp2p/interface-internal": "^1.0.1", + "@libp2p/logger": "^4.0.1", + "@libp2p/multistream-select": "^5.0.0", + "@libp2p/peer-collections": "^5.0.0", + "@libp2p/peer-id": "^4.0.1", + "@libp2p/peer-id-factory": "^4.0.0", + "@libp2p/peer-store": "^10.0.0", + "@libp2p/utils": "^5.0.2", + "@multiformats/mafmt": "^12.1.6", + "@multiformats/multiaddr": "^12.1.10", + "@multiformats/multiaddr-matcher": "^1.1.0", + "any-signal": "^4.1.1", + "datastore-core": "^9.0.1", + "delay": "^6.0.0", + "interface-datastore": "^8.2.0", + "it-all": "^3.0.2", + "it-drain": "^3.0.2", + "it-filter": "^3.0.1", + "it-first": "^3.0.3", + "it-map": "^3.0.4", + "it-merge": "^3.0.0", + "it-pipe": "^3.0.1", + "it-stream-types": "^2.0.1", + "merge-options": "^3.0.4", + "multiformats": "^12.1.3", + "p-defer": "^4.0.0", + "p-queue": "^7.4.1", + "private-ip": "^3.0.1", + "rate-limiter-flexible": "^3.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/merge-options": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", + "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", + "dependencies": { + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mortice": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mortice/-/mortice-3.0.1.tgz", + "integrity": "sha512-eyDUsl1nCR9+JtNksKnaESLP9MgAXCA4w1LTtsmOSQNsThnv++f36rrBu5fC/fdGIwTJZmbiaR/QewptH93pYA==", + "dependencies": { + "nanoid": "^4.0.0", + "observable-webworkers": "^2.0.1", + "p-queue": "^7.2.0", + "p-timeout": "^6.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/mortice/node_modules/nanoid": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.2.tgz", + "integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^14 || ^16 || >=18" + } + }, + "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/multiformats": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", + "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/nanoid": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.4.tgz", + "integrity": "sha512-vAjmBf13gsmhXSgBrtIclinISzFFy22WwCYoyilZlsrRXNIHSwgFQ1bEdjRwMT3aoadeIF6HMuDRlOxzfXV8ig==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/observable-webworkers": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/observable-webworkers/-/observable-webworkers-2.0.1.tgz", + "integrity": "sha512-JI1vB0u3pZjoQKOK1ROWzp0ygxSi7Yb0iR+7UNsw4/Zn4cQ0P3R7XL38zac/Dy2tEA7Lg88/wIJTjF8vYXZ0uw==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/p-defer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", + "integrity": "sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-7.4.1.tgz", + "integrity": "sha512-vRpMXmIkYF2/1hLBKisKeVYJZ8S2tZ0zEAmIJgdVKP2nq0nh4qCdf8bgw+ZgKrkh71AOCaqzwbJJk1WtdcF3VA==", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^5.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue/node_modules/p-timeout": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.2.tgz", + "integrity": "sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/private-ip": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/private-ip/-/private-ip-3.0.1.tgz", + "integrity": "sha512-Ezc16ANuhSHmWAE6lbXUKburNzGpR0J5X0Zh5Um/PZ/s57Fp+HYqYe6BYPH2QbqKr/5WebfzJQ1jq6Kj5dbRmA==", + "dependencies": { + "@chainsafe/is-ip": "^2.0.1", + "ip-regex": "^5.0.0", + "ipaddr.js": "^2.1.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/protons-runtime": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-5.2.0.tgz", + "integrity": "sha512-jL3VSbXllgm17zurKQ/z+Ath0w+4BknJ+l/NLocfjAB8hbeASOZTNtb7zK3nDsKq2pHK9YFumNQvpkZ6gFfWhA==", + "dependencies": { + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/race-signal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/race-signal/-/race-signal-1.0.2.tgz", + "integrity": "sha512-o3xNv0iTcIDQCXFlF6fPAMEBRjFxssgGoRqLbg06m+AdzEXXLUmoNOoUHTVz2NoBI8hHwKFKoC6IqyNtWr2bww==" + }, + "node_modules/rate-limiter-flexible": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/rate-limiter-flexible/-/rate-limiter-flexible-3.0.4.tgz", + "integrity": "sha512-LFrdT9Pl/TRxG143frHBPyESXHvS2tstLfAUM6shBbJ3M6YssT2cIUWFwAWVAU9Vl4Z2gUN7ZE7tSdQh/0aqcA==" + }, + "node_modules/receptacle": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/receptacle/-/receptacle-1.3.2.tgz", + "integrity": "sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/stream-to-it": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/stream-to-it/-/stream-to-it-0.2.4.tgz", + "integrity": "sha512-4vEbkSs83OahpmBybNJXlJd7d6/RxzkkSdT3I0mnGt79Xd2Kk+e1JqbvAvsQfCeKj3aKb0QIWkyK3/n0j506vQ==", + "dependencies": { + "get-iterator": "^1.0.2" + } + }, + "node_modules/stream-to-it/node_modules/get-iterator": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-1.0.2.tgz", + "integrity": "sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg==" + }, + "node_modules/uint8-varint": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/uint8-varint/-/uint8-varint-2.0.2.tgz", + "integrity": "sha512-LZXmBT0jiHR7J4oKM1GUhtdLFW1yPauzI8NjJlotXn92TprO9u8VMvEVR4QMk8xhUVUd+2fqfU2/kGbVHYSSWw==", + "dependencies": { + "uint8arraylist": "^2.0.0", + "uint8arrays": "^4.0.2" + } + }, + "node_modules/uint8arraylist": { + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.7.tgz", + "integrity": "sha512-ohRElqR6C5dd60vRFLq40MCiSnUe1AzkpHvbCEMCGGP6zMoFYECsjdhL6bR1kTK37ONNRDuHQ3RIpScRYcYYIg==", + "dependencies": { + "uint8arrays": "^4.0.2" + } + }, + "node_modules/uint8arrays": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.9.tgz", + "integrity": "sha512-iHU8XJJnfeijILZWzV7RgILdPHqe0mjJvyzY4mO8aUUtHsDbPa2Gc8/02Kc4zeokp2W6Qq8z9Ap1xkQ1HfbKwg==", + "dependencies": { + "multiformats": "^12.0.1" + } + }, + "node_modules/wherearewe": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wherearewe/-/wherearewe-2.0.1.tgz", + "integrity": "sha512-XUguZbDxCA2wBn2LoFtcEhXL6AXo+hVjGonwhSTTTU9SzbWG8Xu3onNIpzf9j/mYUcJQ0f+m37SzG77G851uFw==", + "dependencies": { + "is-electron": "^2.2.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "noise": { + "version": "14.0.0", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/as-chacha20poly1305": "^0.1.0", + "@chainsafe/as-sha256": "^0.4.1", + "@libp2p/crypto": "^3.0.0", + "@libp2p/interface": "^1.0.0", + "@libp2p/peer-id": "^4.0.0", + "@noble/ciphers": "^0.4.0", + "@noble/curves": "^1.1.0", + "@noble/hashes": "^1.3.1", + "it-byte-stream": "^1.0.0", + "it-length-prefixed": "^9.0.1", + "it-length-prefixed-stream": "^1.0.0", + "it-pair": "^2.0.6", + "it-pipe": "^3.0.1", + "it-stream-types": "^2.0.1", + "protons-runtime": "^5.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.4", + "wherearewe": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + } + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/package.json b/perf/impl/js-libp2p/v1.0-noise-alloc/package.json new file mode 100644 index 000000000..b4e28e217 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/package.json @@ -0,0 +1,13 @@ +{ + "name": "@libp2p/perf-js-libp2p-1-0", + "private": true, + "main": "index.js", + "type": "module", + "dependencies": { + "@chainsafe/libp2p-noise": "file:./noise", + "@chainsafe/libp2p-yamux": "^6.0.1", + "@libp2p/perf": "^3.0.4", + "@libp2p/tcp": "^9.0.4", + "libp2p": "^1.0.5" + } +} diff --git a/perf/impl/js-libp2p/v1.0-noise-alloc/perf b/perf/impl/js-libp2p/v1.0-noise-alloc/perf new file mode 100755 index 000000000..1a3e19c51 --- /dev/null +++ b/perf/impl/js-libp2p/v1.0-noise-alloc/perf @@ -0,0 +1,45 @@ +#!/bin/bash + +# In case this script is `kill`ed, `kill` its child process, namely the `node` +# process below. +cleanup() { + kill $node_pid +} +trap cleanup EXIT TERM + +# Find the path to the Node.js executable +node_path=$(which node) + +run_server=false +server_address="" +upload_bytes=0 +download_bytes=0 +transport="" + +# Parse named parameters manually +for ((i = 1; i <= $#; i++)); do + if [ "${!i}" == "--server-address" ]; then + server_address="${@:i+1:1}" + fi + if [ "${!i}" == "--upload-bytes" ]; then + upload_bytes="${@:i+1:1}" + fi + if [ "${!i}" == "--download-bytes" ]; then + download_bytes="${@:i+1:1}" + fi + if [ "${!i}" == "--transport" ]; then + transport="${@:i+1:1}" + fi + if [ "${!i}" == "--run-server" ]; then + run_server=true + fi +done + +# Run perf +node $(dirname "$0")/index.js --run-server=$run_server --server-address=$server_address --upload-bytes=$upload_bytes --download-bytes=$download_bytes --transport=$transport & + +node_pid=$! + +# Wait for `node_pid` to finish, or for it to be `kill`ed by the above +# `cleanup`. +wait $node_pid diff --git a/perf/impl/js-libp2p/v1.0/package-lock.json b/perf/impl/js-libp2p/v1.0/package-lock.json index 0ae7eeb66..66eba5376 100644 --- a/perf/impl/js-libp2p/v1.0/package-lock.json +++ b/perf/impl/js-libp2p/v1.0/package-lock.json @@ -6,11 +6,11 @@ "": { "name": "@libp2p/perf-js-libp2p-1-0", "dependencies": { - "@chainsafe/libp2p-noise": "^13.0.3", - "@chainsafe/libp2p-yamux": "^5.0.3", - "@libp2p/perf": "next", - "@libp2p/tcp": "next", - "libp2p": "next" + "@chainsafe/libp2p-noise": "^14.0.0", + "@chainsafe/libp2p-yamux": "^6.0.1", + "@libp2p/perf": "^3.0.4", + "@libp2p/tcp": "^9.0.4", + "libp2p": "^1.0.5" } }, "node_modules/@chainsafe/as-chacha20poly1305": { @@ -29,16 +29,15 @@ "integrity": "sha512-ndGqEMG1W5WkGagaqOZHpPU172AGdxr+LD15sv3WIUvT5oCFUrG1Y0CW/v2Egwj4JXEvSibaIIIqImsm98y1nA==" }, "node_modules/@chainsafe/libp2p-noise": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-13.0.3.tgz", - "integrity": "sha512-hzfhKUEx5XHDaC21wgROhTUFelaeYojH3DFYhCvqFnhRPUjmz+WJh2jweKaUlysKTTrEHv+JJob/TDY/IS6fRw==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-14.0.0.tgz", + "integrity": "sha512-/E7QnSL24APpfXTj/YRS/EVRvTATg09+AwqEUGs+OeLFcO/DwPal3W6pj7c4eyJFSgxnegbpbgiH8EBvTZ4Iwg==", "dependencies": { "@chainsafe/as-chacha20poly1305": "^0.1.0", "@chainsafe/as-sha256": "^0.4.1", - "@libp2p/crypto": "^2.0.0", - "@libp2p/interface": "^0.1.0", - "@libp2p/logger": "^3.0.0", - "@libp2p/peer-id": "^3.0.0", + "@libp2p/crypto": "^3.0.0", + "@libp2p/interface": "^1.0.0", + "@libp2p/peer-id": "^4.0.0", "@noble/ciphers": "^0.4.0", "@noble/curves": "^1.1.0", "@noble/hashes": "^1.3.1", @@ -59,21 +58,17 @@ } }, "node_modules/@chainsafe/libp2p-yamux": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-yamux/-/libp2p-yamux-5.0.3.tgz", - "integrity": "sha512-I2g8eJFm4xvyrD9Z8+8RvqpCBqHiFtcOGrl4sQXPkktw0cY5hvXf0knIjOLacoNOdAPKG9MNscT4Vojp+sb6cw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-yamux/-/libp2p-yamux-6.0.1.tgz", + "integrity": "sha512-8ar6jph9ZuUUxQ8t8W1MaZqH7f7KvGK2wR7TDGnN0r4QtZc07ICNgVjnolnI9/8bclrI5Um4uMa8QCYKTrdvDQ==", "dependencies": { - "@libp2p/interface": "^0.1.0", - "@libp2p/logger": "^3.0.0", + "@libp2p/interface": "^1.0.0", + "@libp2p/utils": "^5.0.0", "get-iterator": "^2.0.1", "it-foreach": "^2.0.3", "it-pipe": "^3.0.1", "it-pushable": "^3.2.0", "uint8arraylist": "^2.4.3" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" } }, "node_modules/@chainsafe/netmask": { @@ -85,14 +80,14 @@ } }, "node_modules/@libp2p/crypto": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-2.0.8.tgz", - "integrity": "sha512-8e5fh6bsJNpSjhrggtlm8QF+BERjelJswIjRS69aKgxp24R4z2kDM4pRYPkfQjXJDLNDtqWtKNmePgX23+QJsA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-3.0.1.tgz", + "integrity": "sha512-CvqzsWvAYaga/Du3gDRChN9d8PUnOoCQg3VlugKf6tfw5+1pd7sMDhyMLajXqFsWqQUY6FojgB1TS4izpODMpw==", "dependencies": { - "@libp2p/interface": "^0.1.6", + "@libp2p/interface": "^1.0.1", "@noble/curves": "^1.1.0", "@noble/hashes": "^1.3.1", - "multiformats": "^12.0.1", + "multiformats": "^12.1.3", "node-forge": "^1.1.0", "protons-runtime": "^5.0.0", "uint8arraylist": "^2.4.3", @@ -100,183 +95,98 @@ } }, "node_modules/@libp2p/interface": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-0.1.6.tgz", - "integrity": "sha512-Lzc5cS/hXuoXhuAbVIxJIHLCYmfPcbU0vVgrpMoiP1Qb2Q3ETU4A46GB8s8mWXgSU6tr9RcqerUqzFYD6+OAag==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-1.0.1.tgz", + "integrity": "sha512-TRo1YxJ+AVjt5ms+mTOp8xcoCis5HAUMzv0XfCvxtIw77Bog6TPR5VdkGutlEQOKUMzXtLP0lW88fTQBeiiOnA==", "dependencies": { - "@multiformats/multiaddr": "^12.1.5", - "abortable-iterator": "^5.0.1", - "it-pushable": "^3.2.0", + "@multiformats/multiaddr": "^12.1.10", + "it-pushable": "^3.2.1", "it-stream-types": "^2.0.1", - "multiformats": "^12.0.1", - "p-defer": "^4.0.0", - "race-signal": "^1.0.0", + "multiformats": "^12.1.3", "uint8arraylist": "^2.4.3" } }, "node_modules/@libp2p/interface-internal": { - "version": "0.1.9-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/interface-internal/-/interface-internal-0.1.9-d8f5bc211.tgz", - "integrity": "sha512-nW8Rk6dcx1SbhWigrHexoIoyspOUuXaTesgmDVGtPcsIT+efT5RNjgKo+1ep6H4hxz1Z9GKVlI0H7mOslQXJ1A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-internal/-/interface-internal-1.0.1.tgz", + "integrity": "sha512-mJ2uWPzjnIk9Y1/Ca/xk0coz8PCg8tnAQgxN+GNG0cdAbY6Wu7dNDm0P3aTh9NYfjCp+5nzSSEE2UW/nr7TB9Q==", "dependencies": { - "@libp2p/interface": "0.1.6-d8f5bc211", - "@libp2p/peer-collections": "4.0.8-d8f5bc211", + "@libp2p/interface": "^1.0.1", + "@libp2p/peer-collections": "^5.0.0", "@multiformats/multiaddr": "^12.1.10", "uint8arraylist": "^2.4.3" } }, - "node_modules/@libp2p/interface-internal/node_modules/@libp2p/interface": { - "version": "0.1.6-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-0.1.6-d8f5bc211.tgz", - "integrity": "sha512-TpetndcnUxxbS9fxejLUhD8I9DqyWbgkhhtFoSUGa78rkhF8Dn/zIiEuNdW73kXAErb/HTpuB9BCGrroEShi/w==", - "dependencies": { - "@multiformats/multiaddr": "^12.1.10", - "it-pushable": "^3.2.1", - "it-stream-types": "^2.0.1", - "multiformats": "^12.1.3", - "uint8arraylist": "^2.4.3" - } - }, "node_modules/@libp2p/logger": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-3.1.0.tgz", - "integrity": "sha512-qJbJBAhxHVsRBtQSOIkSLi0lskUSFjzE+zm0QvoyxzZKSz+mX41mZLbnofPIVOVauoDQ40dXpe7WDUOq8AbiQQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-4.0.1.tgz", + "integrity": "sha512-d7kJmbkphNvEI3Da4so+4nxUJhwW/T/d8Pd+aQIuT27RYNeVoRfkFkjYwPIP+NvJXtU4LDju7VDPLbPbU2zFGA==", "dependencies": { - "@libp2p/interface": "^0.1.6", - "@multiformats/multiaddr": "^12.1.5", + "@libp2p/interface": "^1.0.1", + "@multiformats/multiaddr": "^12.1.10", "debug": "^4.3.4", "interface-datastore": "^8.2.0", - "multiformats": "^12.0.1" + "multiformats": "^12.1.3" } }, "node_modules/@libp2p/multistream-select": { - "version": "4.0.6-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/multistream-select/-/multistream-select-4.0.6-d8f5bc211.tgz", - "integrity": "sha512-QVkPzdVeVdMDxIQaYDyDOFhZulmlxYva5tIsvWTocmXto/BddfMyYNAxVp44ocTHyp37DAo3vHQ1qGfcc4f4KQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/multistream-select/-/multistream-select-5.0.0.tgz", + "integrity": "sha512-1y4b8he9djNQYteKFRnDisryOGV70SQOaSuiNJgKaIPFFJ9DwYbz/ZCV0k0Ld4zqB4Ncm8ibBmyYuZg+yoOBuQ==", "dependencies": { - "@libp2p/interface": "0.1.6-d8f5bc211", + "@libp2p/interface": "^1.0.1", "it-length-prefixed": "^9.0.3", "it-length-prefixed-stream": "^1.1.1", "it-pipe": "^3.0.1", "it-stream-types": "^2.0.1", + "p-defer": "^4.0.0", "uint8-varint": "^2.0.2", "uint8arraylist": "^2.4.3", "uint8arrays": "^4.0.6" } }, - "node_modules/@libp2p/multistream-select/node_modules/@libp2p/interface": { - "version": "0.1.6-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-0.1.6-d8f5bc211.tgz", - "integrity": "sha512-TpetndcnUxxbS9fxejLUhD8I9DqyWbgkhhtFoSUGa78rkhF8Dn/zIiEuNdW73kXAErb/HTpuB9BCGrroEShi/w==", - "dependencies": { - "@multiformats/multiaddr": "^12.1.10", - "it-pushable": "^3.2.1", - "it-stream-types": "^2.0.1", - "multiformats": "^12.1.3", - "uint8arraylist": "^2.4.3" - } - }, "node_modules/@libp2p/peer-collections": { - "version": "4.0.8-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-4.0.8-d8f5bc211.tgz", - "integrity": "sha512-b6oJKUuXXetqLq+ivcaXRYHYTCe6uYnnmPcdxox2MsJFMKmgJUcoSQckvxAwvTwkAJ7ipCR1BqKgeFgPW1acQg==", - "dependencies": { - "@libp2p/interface": "0.1.6-d8f5bc211", - "@libp2p/peer-id": "3.0.6-d8f5bc211" - } - }, - "node_modules/@libp2p/peer-collections/node_modules/@libp2p/interface": { - "version": "0.1.6-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-0.1.6-d8f5bc211.tgz", - "integrity": "sha512-TpetndcnUxxbS9fxejLUhD8I9DqyWbgkhhtFoSUGa78rkhF8Dn/zIiEuNdW73kXAErb/HTpuB9BCGrroEShi/w==", - "dependencies": { - "@multiformats/multiaddr": "^12.1.10", - "it-pushable": "^3.2.1", - "it-stream-types": "^2.0.1", - "multiformats": "^12.1.3", - "uint8arraylist": "^2.4.3" - } - }, - "node_modules/@libp2p/peer-collections/node_modules/@libp2p/peer-id": { - "version": "3.0.6-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-3.0.6-d8f5bc211.tgz", - "integrity": "sha512-lCmqh5bK6o793xauQmeY53Xw5XdeKvmqJj8snQgi+CoMhqKtn1ScICSki6cL/sQmxwEhnotvfMxrrNejoR8OYA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-5.0.0.tgz", + "integrity": "sha512-2h6BF6t68TxnsErZrPzkMapH0GpZSCmOaimUMidrs9oSnxIMf62QnNAbfar8U2XbXnPJD9WkEicnSuJgDwg8Vw==", "dependencies": { - "@libp2p/interface": "0.1.6-d8f5bc211", - "multiformats": "^12.1.3", - "uint8arrays": "^4.0.6" + "@libp2p/interface": "^1.0.1", + "@libp2p/peer-id": "^4.0.1" } }, "node_modules/@libp2p/peer-id": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-3.0.6.tgz", - "integrity": "sha512-iN1Ia5gH2U1V/GOVRmLHmVY6fblxzrOPUoZrMYjHl/K4s+AiI7ym/527WDeQvhQpD7j3TfDwcAYforD2dLGpLw==", - "dependencies": { - "@libp2p/interface": "^0.1.6", - "multiformats": "^12.0.1", - "uint8arrays": "^4.0.6" - } - }, - "node_modules/@libp2p/peer-id-factory": { - "version": "3.0.8-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/peer-id-factory/-/peer-id-factory-3.0.8-d8f5bc211.tgz", - "integrity": "sha512-W1CRuXT5R6UjP1OnaBwj5Sek+74SlCUerQ5naRTNRrtXCWU9MpyrnAMG+a0Zkbt70TcpuIDaJKnoJEo37hIIaw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-4.0.1.tgz", + "integrity": "sha512-rEgZ4YPSVh7gqIXxWE9HVw318Og8fJohI2vWXNx2h+Ib/iMQTGrqGgSaJhjUMWYIy8MadpjofCPXObPEIX3E3g==", "dependencies": { - "@libp2p/crypto": "2.0.8-d8f5bc211", - "@libp2p/interface": "0.1.6-d8f5bc211", - "@libp2p/peer-id": "3.0.6-d8f5bc211", + "@libp2p/interface": "^1.0.1", "multiformats": "^12.1.3", - "protons-runtime": "^5.0.0", - "uint8arraylist": "^2.4.3", "uint8arrays": "^4.0.6" } }, - "node_modules/@libp2p/peer-id-factory/node_modules/@libp2p/crypto": { - "version": "2.0.8-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-2.0.8-d8f5bc211.tgz", - "integrity": "sha512-EX/wl/2Ln0eMcMjfjFSNzIvYE9m7ISOoeYcY7joQPF4YukMrLgLtWn00NHwvEssWzwyGjYk+jdeM/3AGVlr5KQ==", + "node_modules/@libp2p/peer-id-factory": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id-factory/-/peer-id-factory-4.0.0.tgz", + "integrity": "sha512-dFbQOpxqEw4CqV+ZalMc5UABqts+hskMoaqytjmR55pXgL4KDamOyg7hBT/HrHRp2sStf8E2vwQ5wnjv1W9uFQ==", "dependencies": { - "@libp2p/interface": "0.1.6-d8f5bc211", - "@noble/curves": "^1.1.0", - "@noble/hashes": "^1.3.1", + "@libp2p/crypto": "^3.0.1", + "@libp2p/interface": "^1.0.1", + "@libp2p/peer-id": "^4.0.1", "multiformats": "^12.1.3", - "node-forge": "^1.1.0", "protons-runtime": "^5.0.0", "uint8arraylist": "^2.4.3", "uint8arrays": "^4.0.6" } }, - "node_modules/@libp2p/peer-id-factory/node_modules/@libp2p/interface": { - "version": "0.1.6-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-0.1.6-d8f5bc211.tgz", - "integrity": "sha512-TpetndcnUxxbS9fxejLUhD8I9DqyWbgkhhtFoSUGa78rkhF8Dn/zIiEuNdW73kXAErb/HTpuB9BCGrroEShi/w==", - "dependencies": { - "@multiformats/multiaddr": "^12.1.10", - "it-pushable": "^3.2.1", - "it-stream-types": "^2.0.1", - "multiformats": "^12.1.3", - "uint8arraylist": "^2.4.3" - } - }, - "node_modules/@libp2p/peer-id-factory/node_modules/@libp2p/peer-id": { - "version": "3.0.6-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-3.0.6-d8f5bc211.tgz", - "integrity": "sha512-lCmqh5bK6o793xauQmeY53Xw5XdeKvmqJj8snQgi+CoMhqKtn1ScICSki6cL/sQmxwEhnotvfMxrrNejoR8OYA==", - "dependencies": { - "@libp2p/interface": "0.1.6-d8f5bc211", - "multiformats": "^12.1.3", - "uint8arrays": "^4.0.6" - } - }, "node_modules/@libp2p/peer-record": { - "version": "6.0.9-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-6.0.9-d8f5bc211.tgz", - "integrity": "sha512-UZ+9+LeIC9hkobjOrobMa5rNVNaF9EY7hShF1JqzNl0uBYmPxwp3pQbVHBSIrZm1j7Hl24SvkXBHIyuWZMkiwQ==", - "dependencies": { - "@libp2p/crypto": "2.0.8-d8f5bc211", - "@libp2p/interface": "0.1.6-d8f5bc211", - "@libp2p/peer-id": "3.0.6-d8f5bc211", - "@libp2p/utils": "4.0.7-d8f5bc211", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-7.0.0.tgz", + "integrity": "sha512-Kr5XgyRzqJjK4rBu+QA2e2zGT59rp2OKD8kviwpE4NwKWyDs85JaRduorso9KujJG/F0uZI8tOhPjadO1Lwatw==", + "dependencies": { + "@libp2p/crypto": "^3.0.1", + "@libp2p/interface": "^1.0.1", + "@libp2p/peer-id": "^4.0.1", + "@libp2p/utils": "^5.0.2", "@multiformats/multiaddr": "^12.1.10", "protons-runtime": "^5.0.0", "uint8-varint": "^2.0.0", @@ -284,53 +194,16 @@ "uint8arrays": "^4.0.6" } }, - "node_modules/@libp2p/peer-record/node_modules/@libp2p/crypto": { - "version": "2.0.8-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-2.0.8-d8f5bc211.tgz", - "integrity": "sha512-EX/wl/2Ln0eMcMjfjFSNzIvYE9m7ISOoeYcY7joQPF4YukMrLgLtWn00NHwvEssWzwyGjYk+jdeM/3AGVlr5KQ==", - "dependencies": { - "@libp2p/interface": "0.1.6-d8f5bc211", - "@noble/curves": "^1.1.0", - "@noble/hashes": "^1.3.1", - "multiformats": "^12.1.3", - "node-forge": "^1.1.0", - "protons-runtime": "^5.0.0", - "uint8arraylist": "^2.4.3", - "uint8arrays": "^4.0.6" - } - }, - "node_modules/@libp2p/peer-record/node_modules/@libp2p/interface": { - "version": "0.1.6-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-0.1.6-d8f5bc211.tgz", - "integrity": "sha512-TpetndcnUxxbS9fxejLUhD8I9DqyWbgkhhtFoSUGa78rkhF8Dn/zIiEuNdW73kXAErb/HTpuB9BCGrroEShi/w==", - "dependencies": { - "@multiformats/multiaddr": "^12.1.10", - "it-pushable": "^3.2.1", - "it-stream-types": "^2.0.1", - "multiformats": "^12.1.3", - "uint8arraylist": "^2.4.3" - } - }, - "node_modules/@libp2p/peer-record/node_modules/@libp2p/peer-id": { - "version": "3.0.6-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-3.0.6-d8f5bc211.tgz", - "integrity": "sha512-lCmqh5bK6o793xauQmeY53Xw5XdeKvmqJj8snQgi+CoMhqKtn1ScICSki6cL/sQmxwEhnotvfMxrrNejoR8OYA==", - "dependencies": { - "@libp2p/interface": "0.1.6-d8f5bc211", - "multiformats": "^12.1.3", - "uint8arrays": "^4.0.6" - } - }, "node_modules/@libp2p/peer-store": { - "version": "9.0.9-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/peer-store/-/peer-store-9.0.9-d8f5bc211.tgz", - "integrity": "sha512-tyTo+0VrZL0t+RcVqZiNPJCIVW5+BPowF0Um6sK8fAGECIWuigabpPhyiIpkpFy4eai+7dfujgUt97jJK0DMew==", - "dependencies": { - "@libp2p/interface": "0.1.6-d8f5bc211", - "@libp2p/peer-collections": "4.0.8-d8f5bc211", - "@libp2p/peer-id": "3.0.6-d8f5bc211", - "@libp2p/peer-id-factory": "3.0.8-d8f5bc211", - "@libp2p/peer-record": "6.0.9-d8f5bc211", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/peer-store/-/peer-store-10.0.0.tgz", + "integrity": "sha512-DQilgZXfwokKTbr1EDQssIfn5bAMLCEUronhqy9VEIrF7mkiSqjsBtOcftDEJT4dXhDOV8F7mifznvJI32tZIA==", + "dependencies": { + "@libp2p/interface": "^1.0.1", + "@libp2p/peer-collections": "^5.0.0", + "@libp2p/peer-id": "^4.0.1", + "@libp2p/peer-id-factory": "^4.0.0", + "@libp2p/peer-record": "^7.0.0", "@multiformats/multiaddr": "^12.1.10", "interface-datastore": "^8.2.0", "it-all": "^3.0.2", @@ -341,83 +214,37 @@ "uint8arrays": "^4.0.6" } }, - "node_modules/@libp2p/peer-store/node_modules/@libp2p/interface": { - "version": "0.1.6-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-0.1.6-d8f5bc211.tgz", - "integrity": "sha512-TpetndcnUxxbS9fxejLUhD8I9DqyWbgkhhtFoSUGa78rkhF8Dn/zIiEuNdW73kXAErb/HTpuB9BCGrroEShi/w==", - "dependencies": { - "@multiformats/multiaddr": "^12.1.10", - "it-pushable": "^3.2.1", - "it-stream-types": "^2.0.1", - "multiformats": "^12.1.3", - "uint8arraylist": "^2.4.3" - } - }, - "node_modules/@libp2p/peer-store/node_modules/@libp2p/peer-id": { - "version": "3.0.6-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-3.0.6-d8f5bc211.tgz", - "integrity": "sha512-lCmqh5bK6o793xauQmeY53Xw5XdeKvmqJj8snQgi+CoMhqKtn1ScICSki6cL/sQmxwEhnotvfMxrrNejoR8OYA==", - "dependencies": { - "@libp2p/interface": "0.1.6-d8f5bc211", - "multiformats": "^12.1.3", - "uint8arrays": "^4.0.6" - } - }, "node_modules/@libp2p/perf": { - "version": "2.0.1-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/perf/-/perf-2.0.1-d8f5bc211.tgz", - "integrity": "sha512-FUnjoFsHYcSYmOAPUP68l0fpfDpVjCCz1Kd5LFQ0Bu9tkS9C5YkOHw7GtWXgmB72QISYgdGfCBLa107pT/q+dg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/perf/-/perf-3.0.4.tgz", + "integrity": "sha512-keoLx6WkhWn+W5IA6Y4m/N1JxfLdpReXdDmrNMDwoLFsymWI0KmCUq/wQRT3l2T+xRlSPthg+Q7/QabJDSU3ig==", "dependencies": { - "@libp2p/interface": "0.1.6-d8f5bc211", - "@libp2p/interface-internal": "0.1.9-d8f5bc211", + "@libp2p/interface": "^1.0.1", + "@libp2p/interface-internal": "^1.0.1", "@multiformats/multiaddr": "^12.1.10", "it-pushable": "^3.2.3" } }, - "node_modules/@libp2p/perf/node_modules/@libp2p/interface": { - "version": "0.1.6-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-0.1.6-d8f5bc211.tgz", - "integrity": "sha512-TpetndcnUxxbS9fxejLUhD8I9DqyWbgkhhtFoSUGa78rkhF8Dn/zIiEuNdW73kXAErb/HTpuB9BCGrroEShi/w==", - "dependencies": { - "@multiformats/multiaddr": "^12.1.10", - "it-pushable": "^3.2.1", - "it-stream-types": "^2.0.1", - "multiformats": "^12.1.3", - "uint8arraylist": "^2.4.3" - } - }, "node_modules/@libp2p/tcp": { - "version": "8.0.13-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/tcp/-/tcp-8.0.13-d8f5bc211.tgz", - "integrity": "sha512-EXa2HUZmPGmcEd71vYmtSuEjbfqr272/rCCCLgt1qX5WEUjSOUJI/rKEW5Zxz4lpl28ufFCpeJZMw2i7jw/eYg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/tcp/-/tcp-9.0.4.tgz", + "integrity": "sha512-q3wAZMhEUXIEKnHPPHEjcO564P7pIkCWazC8SUGIPRLbmuSnni8cT2kd/Jx6xSv5ZOK2LHzJSKodLlpfi1Gmzg==", "dependencies": { - "@libp2p/interface": "0.1.6-d8f5bc211", - "@libp2p/utils": "4.0.7-d8f5bc211", + "@libp2p/interface": "^1.0.1", + "@libp2p/utils": "^5.0.2", "@multiformats/mafmt": "^12.1.6", "@multiformats/multiaddr": "^12.1.10", "@types/sinon": "^17.0.0", "stream-to-it": "^0.2.2" } }, - "node_modules/@libp2p/tcp/node_modules/@libp2p/interface": { - "version": "0.1.6-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-0.1.6-d8f5bc211.tgz", - "integrity": "sha512-TpetndcnUxxbS9fxejLUhD8I9DqyWbgkhhtFoSUGa78rkhF8Dn/zIiEuNdW73kXAErb/HTpuB9BCGrroEShi/w==", - "dependencies": { - "@multiformats/multiaddr": "^12.1.10", - "it-pushable": "^3.2.1", - "it-stream-types": "^2.0.1", - "multiformats": "^12.1.3", - "uint8arraylist": "^2.4.3" - } - }, "node_modules/@libp2p/utils": { - "version": "4.0.7-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-4.0.7-d8f5bc211.tgz", - "integrity": "sha512-/QsY2IokV1ebFojNLEIe/QVPJ5+pVg8oiwMeGBRQp3M8b5Tp0Ozjm8C9QC98CG9NNGL5ssaO1TrUKOB16j8Q2A==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-5.0.2.tgz", + "integrity": "sha512-PcDAH8pwtXq0pfoO9arHtg3CsqF+reheUd0OaQ9/Fn0YjjNpqcpseQyByBiwhiuQsauWo5RU+CKqRaRdvXKemA==", "dependencies": { "@chainsafe/is-ip": "^2.0.2", - "@libp2p/interface": "0.1.6-d8f5bc211", + "@libp2p/interface": "^1.0.1", "@multiformats/multiaddr": "^12.1.10", "@multiformats/multiaddr-matcher": "^1.1.0", "get-iterator": "^2.0.1", @@ -430,18 +257,6 @@ "uint8arraylist": "^2.4.3" } }, - "node_modules/@libp2p/utils/node_modules/@libp2p/interface": { - "version": "0.1.6-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-0.1.6-d8f5bc211.tgz", - "integrity": "sha512-TpetndcnUxxbS9fxejLUhD8I9DqyWbgkhhtFoSUGa78rkhF8Dn/zIiEuNdW73kXAErb/HTpuB9BCGrroEShi/w==", - "dependencies": { - "@multiformats/multiaddr": "^12.1.10", - "it-pushable": "^3.2.1", - "it-stream-types": "^2.0.1", - "multiformats": "^12.1.3", - "uint8arraylist": "^2.4.3" - } - }, "node_modules/@multiformats/mafmt": { "version": "12.1.6", "resolved": "https://registry.npmjs.org/@multiformats/mafmt/-/mafmt-12.1.6.tgz", @@ -451,13 +266,13 @@ } }, "node_modules/@multiformats/multiaddr": { - "version": "12.1.10", - "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.1.10.tgz", - "integrity": "sha512-Bi3nJ/SE17+te40OLxFOpr9CvRodusZZLYZb3e5a0w9RzQcHzfKnnlfqdysLXZ2W5vXgxCUL/Uhndl51Ff2S+Q==", + "version": "12.1.11", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.1.11.tgz", + "integrity": "sha512-CWG9kETEGTTMdr1T+/JEuMwFld3r3fHNP8LkLoUcLvHRy6yr8sWdotVGEDNEdDO/vrKhuD7bQBws3xMSMMyylg==", "dependencies": { "@chainsafe/is-ip": "^2.0.1", "@chainsafe/netmask": "^2.0.0", - "@libp2p/interface": "^0.1.1", + "@libp2p/interface": "^1.0.0", "dns-over-http-resolver": "3.0.0", "multiformats": "^12.0.1", "uint8-varint": "^2.0.1", @@ -505,9 +320,9 @@ } }, "node_modules/@types/sinon": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.1.tgz", - "integrity": "sha512-Q2Go6TJetYn5Za1+RJA1Aik61Oa2FS8SuJ0juIqUuJ5dZR4wvhKfmSdIqWtQ3P6gljKWjW0/R7FZkA4oXVL6OA==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.2.tgz", + "integrity": "sha512-Zt6heIGsdqERkxctIpvN5Pv3edgBrhoeb3yHyxffd4InN0AX2SVNKSrhdDZKGQICVOxWP/q4DyhpfPNMSrpIiA==", "dependencies": { "@types/sinonjs__fake-timers": "*" } @@ -517,19 +332,6 @@ "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==" }, - "node_modules/abortable-iterator": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-5.0.1.tgz", - "integrity": "sha512-hlZ5Z8UwqrKsJcelVPEqDduZowJPBQJ9ZhBC2FXpja3lXy8X6MoI5uMzIgmrA8+3jcVnp8TF/tx+IBBqYJNUrg==", - "dependencies": { - "get-iterator": "^2.0.0", - "it-stream-types": "^2.0.1" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, "node_modules/any-signal": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-4.1.1.tgz", @@ -540,11 +342,11 @@ } }, "node_modules/datastore-core": { - "version": "9.2.3", - "resolved": "https://registry.npmjs.org/datastore-core/-/datastore-core-9.2.3.tgz", - "integrity": "sha512-jcvrVDt+jp7lUp2WhMXXgX/hoi3VcJebN+z/ZXbIRKOVfNOF4bl8cvr7sQ1y9qITikgC2coXFYd79Wzt/n13ZQ==", + "version": "9.2.5", + "resolved": "https://registry.npmjs.org/datastore-core/-/datastore-core-9.2.5.tgz", + "integrity": "sha512-3Z54iBjwj4KDp5Se4aZRYWnjv1OlQgPfrEF2X+T9rlet8Pe3AKRLVYx0v+11PuL+47d7w0Vc/4847Ylas6fEbQ==", "dependencies": { - "@libp2p/logger": "^3.0.0", + "@libp2p/logger": "^4.0.1", "err-code": "^3.0.1", "interface-store": "^5.0.0", "it-all": "^3.0.1", @@ -611,19 +413,19 @@ "integrity": "sha512-7HuY/hebu4gryTDT7O/XY/fvY9wRByEGdK6QOa4of8npTcv0+NS6frFKABcf6S9EBAsveTuKTsZQQBFMMNILIg==" }, "node_modules/interface-datastore": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-8.2.5.tgz", - "integrity": "sha512-kvLGJMz3RPoJF/g5DbEvfWWempIiSBLVMf63b0PBsziVcSkj0ofzHYI86v8vqpGedkQ81DtPCUKyvX9W7zWvrQ==", + "version": "8.2.7", + "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-8.2.7.tgz", + "integrity": "sha512-ot5B5+VogufRfjhedAXZHm5NuEKyYZkDyVpTjBYIrxYUpS5GIfF2soE/dsd/FiBVqubcxa4IEToMXL5ruMwhjw==", "dependencies": { "interface-store": "^5.0.0", - "nanoid": "^4.0.0", + "nanoid": "^5.0.3", "uint8arrays": "^4.0.2" } }, "node_modules/interface-store": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-5.1.4.tgz", - "integrity": "sha512-SI2co5IAxAybBc9egRM2bXvHOa1RPh5SQQkO6di6t/aX92RbtzP4t8raB0l3GTzQmJADaBbzz8Tfa1QLgfMdGQ==" + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-5.1.5.tgz", + "integrity": "sha512-X0KnJBk3o+YL13MxZBMwa88/b3Mdrpm0yPzkSTKDDVn9BSPH7UK6W+ZtIPO2bxKOQVmq7zqOwAnYnpfqWjb6/g==" }, "node_modules/ip-regex": { "version": "5.0.0", @@ -722,9 +524,9 @@ } }, "node_modules/it-length-prefixed-stream": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/it-length-prefixed-stream/-/it-length-prefixed-stream-1.1.3.tgz", - "integrity": "sha512-NJvKLB3k8e2AdDCYn2dSgCBKB8m05AMqItdjAjiZ28U71FRwQEVrEnCn1cW6ufu3+8dOX4dsFu8c63Ww4Vflhw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/it-length-prefixed-stream/-/it-length-prefixed-stream-1.1.4.tgz", + "integrity": "sha512-6YcQ5jsaYnuXBqF+oSGjSdSY9jF7HWl7yh+dxYytXxbE2GcdiOpn6pLM7m6AlIID9MCzQqMY5nOzaiatQ8A3/A==", "dependencies": { "it-byte-stream": "^1.0.0", "it-length-prefixed": "^9.0.1", @@ -825,20 +627,20 @@ "integrity": "sha512-RG8HDjAZlvkzz5Nav4xq6gK5zNT+Ff1UTIf+CrSJW8nIl6N1FpBH5e7clUshiCn+MmmMoSdIEpw4UaTolszxhA==" }, "node_modules/libp2p": { - "version": "0.46.21-d8f5bc211", - "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-0.46.21-d8f5bc211.tgz", - "integrity": "sha512-vQN9rdTBydRy4fut6+o46I+f0Xb9YEI2s/8WJfgcVpU1ff58Zky3z+tEbGnwOk0MYu6kpWczUKNjUIXApR+N7A==", - "dependencies": { - "@libp2p/crypto": "2.0.8-d8f5bc211", - "@libp2p/interface": "0.1.6-d8f5bc211", - "@libp2p/interface-internal": "0.1.9-d8f5bc211", - "@libp2p/logger": "3.1.0-d8f5bc211", - "@libp2p/multistream-select": "4.0.6-d8f5bc211", - "@libp2p/peer-collections": "4.0.8-d8f5bc211", - "@libp2p/peer-id": "3.0.6-d8f5bc211", - "@libp2p/peer-id-factory": "3.0.8-d8f5bc211", - "@libp2p/peer-store": "9.0.9-d8f5bc211", - "@libp2p/utils": "4.0.7-d8f5bc211", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-1.0.5.tgz", + "integrity": "sha512-h6JsVRCo31WWNwZxI6T5e0hbBagw6GG2N4u2n1vCpnSyVPZQV64cm3hgMQFuNPHv3e69+ABGq2viHRzrBDAaTw==", + "dependencies": { + "@libp2p/crypto": "^3.0.1", + "@libp2p/interface": "^1.0.1", + "@libp2p/interface-internal": "^1.0.1", + "@libp2p/logger": "^4.0.1", + "@libp2p/multistream-select": "^5.0.0", + "@libp2p/peer-collections": "^5.0.0", + "@libp2p/peer-id": "^4.0.1", + "@libp2p/peer-id-factory": "^4.0.0", + "@libp2p/peer-store": "^10.0.0", + "@libp2p/utils": "^5.0.2", "@multiformats/mafmt": "^12.1.6", "@multiformats/multiaddr": "^12.1.10", "@multiformats/multiaddr-matcher": "^1.1.0", @@ -864,55 +666,6 @@ "uint8arrays": "^4.0.6" } }, - "node_modules/libp2p/node_modules/@libp2p/crypto": { - "version": "2.0.8-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-2.0.8-d8f5bc211.tgz", - "integrity": "sha512-EX/wl/2Ln0eMcMjfjFSNzIvYE9m7ISOoeYcY7joQPF4YukMrLgLtWn00NHwvEssWzwyGjYk+jdeM/3AGVlr5KQ==", - "dependencies": { - "@libp2p/interface": "0.1.6-d8f5bc211", - "@noble/curves": "^1.1.0", - "@noble/hashes": "^1.3.1", - "multiformats": "^12.1.3", - "node-forge": "^1.1.0", - "protons-runtime": "^5.0.0", - "uint8arraylist": "^2.4.3", - "uint8arrays": "^4.0.6" - } - }, - "node_modules/libp2p/node_modules/@libp2p/interface": { - "version": "0.1.6-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-0.1.6-d8f5bc211.tgz", - "integrity": "sha512-TpetndcnUxxbS9fxejLUhD8I9DqyWbgkhhtFoSUGa78rkhF8Dn/zIiEuNdW73kXAErb/HTpuB9BCGrroEShi/w==", - "dependencies": { - "@multiformats/multiaddr": "^12.1.10", - "it-pushable": "^3.2.1", - "it-stream-types": "^2.0.1", - "multiformats": "^12.1.3", - "uint8arraylist": "^2.4.3" - } - }, - "node_modules/libp2p/node_modules/@libp2p/logger": { - "version": "3.1.0-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-3.1.0-d8f5bc211.tgz", - "integrity": "sha512-3CoLZmoM7mJV3ttGbYgsS8926/e768Ayll+66wFhfxYuDRFLhybKAwV0UbReeNP24f4pd8Fj1izyBd/1XftErw==", - "dependencies": { - "@libp2p/interface": "0.1.6-d8f5bc211", - "@multiformats/multiaddr": "^12.1.10", - "debug": "^4.3.4", - "interface-datastore": "^8.2.0", - "multiformats": "^12.1.3" - } - }, - "node_modules/libp2p/node_modules/@libp2p/peer-id": { - "version": "3.0.6-d8f5bc211", - "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-3.0.6-d8f5bc211.tgz", - "integrity": "sha512-lCmqh5bK6o793xauQmeY53Xw5XdeKvmqJj8snQgi+CoMhqKtn1ScICSki6cL/sQmxwEhnotvfMxrrNejoR8OYA==", - "dependencies": { - "@libp2p/interface": "0.1.6-d8f5bc211", - "multiformats": "^12.1.3", - "uint8arrays": "^4.0.6" - } - }, "node_modules/merge-options": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", @@ -939,6 +692,23 @@ "npm": ">=7.0.0" } }, + "node_modules/mortice/node_modules/nanoid": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.2.tgz", + "integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^14 || ^16 || >=18" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -954,9 +724,9 @@ } }, "node_modules/nanoid": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.2.tgz", - "integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.4.tgz", + "integrity": "sha512-vAjmBf13gsmhXSgBrtIclinISzFFy22WwCYoyilZlsrRXNIHSwgFQ1bEdjRwMT3aoadeIF6HMuDRlOxzfXV8ig==", "funding": [ { "type": "github", @@ -967,7 +737,7 @@ "nanoid": "bin/nanoid.js" }, "engines": { - "node": "^14 || ^16 || >=18" + "node": "^18 || >=20" } }, "node_modules/netmask": { @@ -1107,21 +877,17 @@ } }, "node_modules/uint8arraylist": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.3.tgz", - "integrity": "sha512-oEVZr4/GrH87K0kjNce6z8pSCzLEPqHNLNR5sj8cJOySrTP8Vb/pMIbZKLJGhQKxm1TiZ31atNrpn820Pyqpow==", + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.7.tgz", + "integrity": "sha512-ohRElqR6C5dd60vRFLq40MCiSnUe1AzkpHvbCEMCGGP6zMoFYECsjdhL6bR1kTK37ONNRDuHQ3RIpScRYcYYIg==", "dependencies": { "uint8arrays": "^4.0.2" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" } }, "node_modules/uint8arrays": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.6.tgz", - "integrity": "sha512-4ZesjQhqOU2Ip6GPReIwN60wRxIupavL8T0Iy36BBHr2qyMrNxsPJvr7vpS4eFt8F8kSguWUPad6ZM9izs/vyw==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.9.tgz", + "integrity": "sha512-iHU8XJJnfeijILZWzV7RgILdPHqe0mjJvyzY4mO8aUUtHsDbPa2Gc8/02Kc4zeokp2W6Qq8z9Ap1xkQ1HfbKwg==", "dependencies": { "multiformats": "^12.0.1" } diff --git a/perf/impl/js-libp2p/v1.0/package.json b/perf/impl/js-libp2p/v1.0/package.json index dc78f0d62..adaa3cf09 100644 --- a/perf/impl/js-libp2p/v1.0/package.json +++ b/perf/impl/js-libp2p/v1.0/package.json @@ -4,10 +4,10 @@ "main": "index.js", "type": "module", "dependencies": { - "@chainsafe/libp2p-noise": "^13.0.3", - "@chainsafe/libp2p-yamux": "^5.0.3", - "@libp2p/perf": "next", - "@libp2p/tcp": "next", - "libp2p": "next" + "@chainsafe/libp2p-noise": "^14.0.0", + "@chainsafe/libp2p-yamux": "^6.0.1", + "@libp2p/perf": "^3.0.4", + "@libp2p/tcp": "^9.0.4", + "libp2p": "^1.0.5" } } diff --git a/perf/runner/src/versions.ts b/perf/runner/src/versions.ts index 41744a299..0fc580a47 100644 --- a/perf/runner/src/versions.ts +++ b/perf/runner/src/versions.ts @@ -5,7 +5,7 @@ export type Version = { } export const versions: Array = [ - { + /*{ id: "v0.34", implementation: "quic-go", transportStacks: ["quic-v1"] @@ -44,10 +44,20 @@ export const versions: Array = [ id: "v0.46", implementation: "js-libp2p", transportStacks: ["tcp"] - }, + },*/ { id: "v1.0", implementation: "js-libp2p", transportStacks: ["tcp"] }, + { + id: "v1.0-noise-alloc", + implementation: "js-libp2p", + transportStacks: ["tcp"] + }, + { + id: "v1.0-noise-alloc-smart", + implementation: "js-libp2p", + transportStacks: ["tcp"] + }, ] From 97e42f43325c9e780529dd0cb8948caf51eb9086 Mon Sep 17 00:00:00 2001 From: achingbrain Date: Sat, 2 Dec 2023 07:56:58 +0000 Subject: [PATCH 2/2] perf: update benchmark results --- perf/runner/benchmark-results.json | 39299 +++------------------------ 1 file changed, 3787 insertions(+), 35512 deletions(-) diff --git a/perf/runner/benchmark-results.json b/perf/runner/benchmark-results.json index 868ee5bf2..e11798ee1 100644 --- a/perf/runner/benchmark-results.json +++ b/perf/runner/benchmark-results.json @@ -8,40448 +8,8723 @@ "result": [ { "type": "intermediary", - "timeSeconds": 1.000006111, - "uploadBytes": 102121472, + "timeSeconds": 1.001, + "uploadBytes": 50397184, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000022259, - "uploadBytes": 220987392, + "timeSeconds": 1.001, + "uploadBytes": 233701376, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000039292, - "uploadBytes": 223084544, + "timeSeconds": 1.001, + "uploadBytes": 257490944, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.00000225, - "uploadBytes": 222150656, + "timeSeconds": 1.001, + "uploadBytes": 259391488, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000128994, - "uploadBytes": 109674496, + "timeSeconds": 1.001, + "uploadBytes": 260308992, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000050937, - "uploadBytes": 76906496, + "timeSeconds": 1.001, + "uploadBytes": 260112384, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000089932, - "uploadBytes": 76906496, + "timeSeconds": 1.001, + "uploadBytes": 260440064, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000044054, - "uploadBytes": 77053952, + "timeSeconds": 1.001, + "uploadBytes": 260374528, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.00000899, - "uploadBytes": 77168640, + "timeSeconds": 1.001, + "uploadBytes": 260374528, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000238233, - "uploadBytes": 77529088, + "timeSeconds": 1.001, + "uploadBytes": 260374528, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000015335, - "uploadBytes": 78381056, + "timeSeconds": 1.001, + "uploadBytes": 248709120, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000051576, - "uploadBytes": 78217216, + "timeSeconds": 1.001, + "uploadBytes": 259915776, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000500569, - "uploadBytes": 70844416, + "timeSeconds": 1.001, + "uploadBytes": 253100032, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.007654255, - "uploadBytes": 55623680, + "timeSeconds": 1.001, + "uploadBytes": 256442368, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000277649, - "uploadBytes": 55803904, + "timeSeconds": 1.001, + "uploadBytes": 260702208, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000017729, - "uploadBytes": 55427072, + "timeSeconds": 1.001, + "uploadBytes": 260440064, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000071808, - "uploadBytes": 55623680, + "timeSeconds": 1.001, + "uploadBytes": 259457024, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000230261, - "uploadBytes": 56000512, + "timeSeconds": 1.001, + "uploadBytes": 259194880, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.00023045, - "uploadBytes": 56180736, + "timeSeconds": 1.001, + "uploadBytes": 249692160, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000045781, - "uploadBytes": 102580224, + "timeSeconds": 1.001, + "uploadBytes": 85458944, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000142233, - "uploadBytes": 221184000, + "timeSeconds": 1.001, + "uploadBytes": 237502464, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000017037, - "uploadBytes": 223395840, + "timeSeconds": 1.001, + "uploadBytes": 259784704, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000018419, - "uploadBytes": 222740480, + "timeSeconds": 1.001, + "uploadBytes": 278790144, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000225845, - "uploadBytes": 221855744, + "timeSeconds": 1.001, + "uploadBytes": 265748480, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000416347, - "uploadBytes": 222363648, + "timeSeconds": 1.001, + "uploadBytes": 252968960, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000611494, - "uploadBytes": 222347264, + "timeSeconds": 1.001, + "uploadBytes": 265224192, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000005538, - "uploadBytes": 221364224, + "timeSeconds": 1.001, + "uploadBytes": 265682944, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000126197, - "uploadBytes": 221544448, + "timeSeconds": 1.001, + "uploadBytes": 260767744, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000050614, - "uploadBytes": 222543872, + "timeSeconds": 1.001, + "uploadBytes": 254279680, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000000123, - "uploadBytes": 221691904, + "timeSeconds": 1.001, + "uploadBytes": 253624320, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000191273, - "uploadBytes": 221380608, + "timeSeconds": 1.001, + "uploadBytes": 258539520, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000636505, - "uploadBytes": 222216192, + "timeSeconds": 1.001, + "uploadBytes": 261029888, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000034402, - "uploadBytes": 222232576, + "timeSeconds": 1.001, + "uploadBytes": 269484032, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000314129, - "uploadBytes": 221446144, + "timeSeconds": 1.001, + "uploadBytes": 262930432, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000219608, - "uploadBytes": 222134272, + "timeSeconds": 1.001, + "uploadBytes": 269090816, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000769369, - "uploadBytes": 174342144, + "timeSeconds": 1.001, + "uploadBytes": 260767744, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000211212, - "uploadBytes": 76365824, + "timeSeconds": 1.001, + "uploadBytes": 265027584, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000008431, - "uploadBytes": 76644352, + "timeSeconds": 1.001, + "uploadBytes": 269025280, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000035918, - "uploadBytes": 100794368, + "timeSeconds": 1.001, + "uploadBytes": 86507520, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000005156, - "uploadBytes": 220643328, + "timeSeconds": 1.001, + "uploadBytes": 244449280, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000032388, - "uploadBytes": 221069312, + "timeSeconds": 1.001, + "uploadBytes": 237830144, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.00007237, - "uploadBytes": 220119040, + "timeSeconds": 1.001, + "uploadBytes": 253100032, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.00002965, - "uploadBytes": 222363648, + "timeSeconds": 1.001, + "uploadBytes": 246677504, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000096317, - "uploadBytes": 219447296, + "timeSeconds": 1.001, + "uploadBytes": 256638976, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000291025, - "uploadBytes": 220479488, + "timeSeconds": 1.001, + "uploadBytes": 260177920, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000028949, - "uploadBytes": 220463104, + "timeSeconds": 1.001, + "uploadBytes": 263585792, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000600674, - "uploadBytes": 195723264, + "timeSeconds": 1.001, + "uploadBytes": 260636672, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.0003603, - "uploadBytes": 75137024, + "timeSeconds": 1.001, + "uploadBytes": 255524864, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000113815, - "uploadBytes": 77037568, + "timeSeconds": 1.001, + "uploadBytes": 259588096, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000478125, - "uploadBytes": 75988992, + "timeSeconds": 1.001, + "uploadBytes": 254345216, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000027751, - "uploadBytes": 76169216, + "timeSeconds": 1.001, + "uploadBytes": 237436928, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.001172397, - "uploadBytes": 77004800, + "timeSeconds": 1.001, + "uploadBytes": 245760000, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000196338, - "uploadBytes": 77561856, + "timeSeconds": 1.001, + "uploadBytes": 248184832, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.00058878, - "uploadBytes": 76824576, + "timeSeconds": 1.001, + "uploadBytes": 256114688, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000318691, - "uploadBytes": 77365248, + "timeSeconds": 1.001, + "uploadBytes": 245563392, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000278698, - "uploadBytes": 78528512, + "timeSeconds": 1.001, + "uploadBytes": 219611136, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000136899, - "uploadBytes": 77807616, + "timeSeconds": 1.001, + "uploadBytes": 232325120, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000019785, - "uploadBytes": 102514688, + "timeSeconds": 1.001, + "uploadBytes": 86114304, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000030101, - "uploadBytes": 221462528, + "timeSeconds": 1.001, + "uploadBytes": 254672896, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000017716, - "uploadBytes": 223428608, + "timeSeconds": 1.001, + "uploadBytes": 265355264, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.00012192, - "uploadBytes": 222183424, + "timeSeconds": 1.001, + "uploadBytes": 249036800, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000021319, - "uploadBytes": 222494720, + "timeSeconds": 1.001, + "uploadBytes": 256180224, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000040993, - "uploadBytes": 222396416, + "timeSeconds": 1.002, + "uploadBytes": 248905728, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000035361, - "uploadBytes": 166887424, + "timeSeconds": 1.001, + "uploadBytes": 252968960, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000051774, - "uploadBytes": 76283904, + "timeSeconds": 1.001, + "uploadBytes": 254803968, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000441444, - "uploadBytes": 76660736, + "timeSeconds": 1.001, + "uploadBytes": 252248064, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.0007116, - "uploadBytes": 76972032, + "timeSeconds": 1.001, + "uploadBytes": 246808576, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000198598, - "uploadBytes": 77185024, + "timeSeconds": 1.001, + "uploadBytes": 254672896, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000422282, - "uploadBytes": 77889536, + "timeSeconds": 1.001, + "uploadBytes": 256180224, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000008944, - "uploadBytes": 78249984, + "timeSeconds": 1.001, + "uploadBytes": 254279680, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000013804, - "uploadBytes": 78086144, + "timeSeconds": 1.001, + "uploadBytes": 251068416, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000175139, - "uploadBytes": 78233600, + "timeSeconds": 1.001, + "uploadBytes": 256049152, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000074087, - "uploadBytes": 78577664, + "timeSeconds": 1.001, + "uploadBytes": 260702208, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000022589, - "uploadBytes": 78970880, + "timeSeconds": 1.001, + "uploadBytes": 265224192, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000615956, - "uploadBytes": 79331328, + "timeSeconds": 1.001, + "uploadBytes": 272498688, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000017724, - "uploadBytes": 79642624, + "timeSeconds": 1.001, + "uploadBytes": 260833280, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000109479, - "uploadBytes": 98828288, + "timeSeconds": 1.001, + "uploadBytes": 87687168, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000032392, - "uploadBytes": 220381184, + "timeSeconds": 1.001, + "uploadBytes": 242679808, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.00021655, - "uploadBytes": 218660864, + "timeSeconds": 1.001, + "uploadBytes": 249298944, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.00000861, - "uploadBytes": 220495872, + "timeSeconds": 1.001, + "uploadBytes": 257163264, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000017791, - "uploadBytes": 219217920, + "timeSeconds": 1.001, + "uploadBytes": 258670592, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000064864, - "uploadBytes": 219250688, + "timeSeconds": 1.001, + "uploadBytes": 259457024, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000025253, - "uploadBytes": 219578368, + "timeSeconds": 1.001, + "uploadBytes": 264241152, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000007158, - "uploadBytes": 218890240, + "timeSeconds": 1.001, + "uploadBytes": 260177920, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000040527, - "uploadBytes": 219250688, + "timeSeconds": 1.001, + "uploadBytes": 267911168, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000037234, - "uploadBytes": 218628096, + "timeSeconds": 1.001, + "uploadBytes": 252379136, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000209341, - "uploadBytes": 219840512, + "timeSeconds": 1.001, + "uploadBytes": 260505600, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000159033, - "uploadBytes": 218595328, + "timeSeconds": 1.001, + "uploadBytes": 250150912, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.00009601, - "uploadBytes": 89686016, + "timeSeconds": 1.001, + "uploadBytes": 251330560, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000073498, - "uploadBytes": 75268096, + "timeSeconds": 1.001, + "uploadBytes": 266534912, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000554376, - "uploadBytes": 75366400, + "timeSeconds": 1.001, + "uploadBytes": 258736128, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000023867, - "uploadBytes": 76890112, + "timeSeconds": 1.001, + "uploadBytes": 265879552, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000368735, - "uploadBytes": 76087296, + "timeSeconds": 1.001, + "uploadBytes": 262144000, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000059917, - "uploadBytes": 76431360, + "timeSeconds": 1.001, + "uploadBytes": 260112384, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000350265, - "uploadBytes": 77283328, + "timeSeconds": 1.001, + "uploadBytes": 257949696, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000048464, - "uploadBytes": 105562112, + "timeSeconds": 1.001, + "uploadBytes": 87162880, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000030481, - "uploadBytes": 224624640, + "timeSeconds": 1.001, + "uploadBytes": 255524864, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000050417, - "uploadBytes": 225820672, + "timeSeconds": 1.001, + "uploadBytes": 261160960, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000197197, - "uploadBytes": 83050496, + "timeSeconds": 1.001, + "uploadBytes": 260964352, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000343589, - "uploadBytes": 77987840, + "timeSeconds": 1.001, + "uploadBytes": 261619712, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000018525, - "uploadBytes": 78577664, + "timeSeconds": 1.001, + "uploadBytes": 260177920, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000206976, - "uploadBytes": 78610432, + "timeSeconds": 1.001, + "uploadBytes": 261357568, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000200009, - "uploadBytes": 78839808, + "timeSeconds": 1.001, + "uploadBytes": 257425408, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000055292, - "uploadBytes": 79167488, + "timeSeconds": 1.001, + "uploadBytes": 261292032, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000130312, - "uploadBytes": 79413248, + "timeSeconds": 1.001, + "uploadBytes": 253034496, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.00073813, - "uploadBytes": 79462400, + "timeSeconds": 1.001, + "uploadBytes": 254083072, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000031265, - "uploadBytes": 79806464, + "timeSeconds": 1.001, + "uploadBytes": 259457024, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000016816, - "uploadBytes": 79888384, + "timeSeconds": 1.001, + "uploadBytes": 255197184, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000011022, - "uploadBytes": 80248832, + "timeSeconds": 1.001, + "uploadBytes": 252379136, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000026256, - "uploadBytes": 80609280, + "timeSeconds": 1.001, + "uploadBytes": 257163264, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.00054649, - "uploadBytes": 80625664, + "timeSeconds": 1.001, + "uploadBytes": 262078464, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000475755, - "uploadBytes": 80904192, + "timeSeconds": 1.001, + "uploadBytes": 256901120, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000637148, - "uploadBytes": 81215488, + "timeSeconds": 1.001, + "uploadBytes": 260112384, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000309932, - "uploadBytes": 81510400, + "timeSeconds": 1.001, + "uploadBytes": 256901120, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.00007493, - "uploadBytes": 96518144, + "timeSeconds": 1.001, + "uploadBytes": 87425024, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000277741, - "uploadBytes": 94830592, + "timeSeconds": 1.001, + "uploadBytes": 239927296, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000070558, - "uploadBytes": 75153408, + "timeSeconds": 1.001, + "uploadBytes": 250740736, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000164874, - "uploadBytes": 75333632, + "timeSeconds": 1.001, + "uploadBytes": 251985920, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000249108, - "uploadBytes": 76873728, + "timeSeconds": 1.001, + "uploadBytes": 265617408, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.00004421, - "uploadBytes": 76120064, + "timeSeconds": 1.001, + "uploadBytes": 258015232, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000541411, - "uploadBytes": 76267520, + "timeSeconds": 1.001, + "uploadBytes": 253624320, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.001090504, - "uploadBytes": 77266944, + "timeSeconds": 1.001, + "uploadBytes": 254279680, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000163369, - "uploadBytes": 77365248, + "timeSeconds": 1.001, + "uploadBytes": 254738432, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000044743, - "uploadBytes": 77119488, + "timeSeconds": 1.001, + "uploadBytes": 252510208, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000060272, - "uploadBytes": 77611008, + "timeSeconds": 1.001, + "uploadBytes": 253296640, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000019198, - "uploadBytes": 78331904, + "timeSeconds": 1.001, + "uploadBytes": 260636672, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000411731, - "uploadBytes": 77840384, + "timeSeconds": 1.001, + "uploadBytes": 255918080, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000020269, - "uploadBytes": 78348288, + "timeSeconds": 1.001, + "uploadBytes": 260702208, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000116116, - "uploadBytes": 78807040, + "timeSeconds": 1.001, + "uploadBytes": 263323648, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000089186, - "uploadBytes": 78495744, + "timeSeconds": 1.001, + "uploadBytes": 261816320, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000029331, - "uploadBytes": 79020032, + "timeSeconds": 1.001, + "uploadBytes": 261095424, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000104762, - "uploadBytes": 79577088, + "timeSeconds": 1.001, + "uploadBytes": 261226496, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000206387, - "uploadBytes": 79298560, + "timeSeconds": 1.001, + "uploadBytes": 261423104, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000023569, - "uploadBytes": 106217472, + "timeSeconds": 1.001, + "uploadBytes": 92667904, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.004997332, - "uploadBytes": 155205632, + "timeSeconds": 1.001, + "uploadBytes": 254083072, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000418531, - "uploadBytes": 77791232, + "timeSeconds": 1.001, + "uploadBytes": 263651328, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000147714, - "uploadBytes": 78364672, + "timeSeconds": 1.001, + "uploadBytes": 268304384, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000327312, - "uploadBytes": 78495744, + "timeSeconds": 1.001, + "uploadBytes": 268632064, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000238485, - "uploadBytes": 78839808, + "timeSeconds": 1.001, + "uploadBytes": 267780096, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000389824, - "uploadBytes": 78839808, + "timeSeconds": 1.001, + "uploadBytes": 268304384, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.00004119, - "uploadBytes": 79151104, + "timeSeconds": 1.001, + "uploadBytes": 269025280, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000514415, - "uploadBytes": 79773696, + "timeSeconds": 1.001, + "uploadBytes": 269352960, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000033189, - "uploadBytes": 79806464, + "timeSeconds": 1.001, + "uploadBytes": 267255808, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000022807, - "uploadBytes": 80003072, + "timeSeconds": 1.001, + "uploadBytes": 264372224, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000003806, - "uploadBytes": 80445440, + "timeSeconds": 1.001, + "uploadBytes": 261750784, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000018359, - "uploadBytes": 80363520, + "timeSeconds": 1.001, + "uploadBytes": 256507904, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000105821, - "uploadBytes": 80625664, + "timeSeconds": 1.001, + "uploadBytes": 269156352, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000778778, - "uploadBytes": 80756736, + "timeSeconds": 1.001, + "uploadBytes": 267452416, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000157196, - "uploadBytes": 81117184, + "timeSeconds": 1.001, + "uploadBytes": 269090816, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000832604, - "uploadBytes": 81510400, + "timeSeconds": 1.001, + "uploadBytes": 267124736, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000350018, - "uploadBytes": 81559552, + "timeSeconds": 1.001, + "uploadBytes": 264896512, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000177459, - "uploadBytes": 81838080, + "timeSeconds": 1.001, + "uploadBytes": 263847936, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000016104, - "uploadBytes": 103022592, + "timeSeconds": 1.001, + "uploadBytes": 99745792, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000080048, - "uploadBytes": 221495296, + "timeSeconds": 1.001, + "uploadBytes": 255000576, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000044401, - "uploadBytes": 223576064, + "timeSeconds": 1.001, + "uploadBytes": 259063808, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000108424, - "uploadBytes": 223625216, + "timeSeconds": 1.001, + "uploadBytes": 271319040, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000018855, - "uploadBytes": 222658560, + "timeSeconds": 1.001, + "uploadBytes": 258932736, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000010682, - "uploadBytes": 222314496, + "timeSeconds": 1.001, + "uploadBytes": 267845632, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.0000199, - "uploadBytes": 222560256, + "timeSeconds": 1.001, + "uploadBytes": 271777792, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000004494, - "uploadBytes": 222543872, + "timeSeconds": 1.001, + "uploadBytes": 263585792, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000470646, - "uploadBytes": 222347264, + "timeSeconds": 1.001, + "uploadBytes": 268828672, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000189679, - "uploadBytes": 222265344, + "timeSeconds": 1.001, + "uploadBytes": 276561920, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000140318, - "uploadBytes": 222396416, + "timeSeconds": 1.001, + "uploadBytes": 265682944, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000683705, - "uploadBytes": 125124608, + "timeSeconds": 1.001, + "uploadBytes": 256376832, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000253168, - "uploadBytes": 76791808, + "timeSeconds": 1.001, + "uploadBytes": 276758528, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.003829465, - "uploadBytes": 77561856, + "timeSeconds": 1.001, + "uploadBytes": 275972096, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000011338, - "uploadBytes": 77430784, + "timeSeconds": 1.001, + "uploadBytes": 269615104, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000098498, - "uploadBytes": 77463552, + "timeSeconds": 1.001, + "uploadBytes": 271384576, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000166561, - "uploadBytes": 77774848, + "timeSeconds": 1.001, + "uploadBytes": 277217280, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000534166, - "uploadBytes": 77905920, + "timeSeconds": 1.001, + "uploadBytes": 277610496, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000204268, - "uploadBytes": 78430208, + "timeSeconds": 1.001, + "uploadBytes": 277413888, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.00241671, - "uploadBytes": 97583104, + "timeSeconds": 1.001, + "uploadBytes": 106496000, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.007479214, - "uploadBytes": 140132352, + "timeSeconds": 1.001, + "uploadBytes": 242941952, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000101437, - "uploadBytes": 75661312, + "timeSeconds": 1.001, + "uploadBytes": 250413056, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000494992, - "uploadBytes": 74924032, + "timeSeconds": 1.001, + "uploadBytes": 244973568, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000423848, - "uploadBytes": 76087296, + "timeSeconds": 1.001, + "uploadBytes": 256049152, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.001313933, - "uploadBytes": 75546624, + "timeSeconds": 1.001, + "uploadBytes": 258605056, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000052368, - "uploadBytes": 76578816, + "timeSeconds": 1.001, + "uploadBytes": 258736128, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000001001, - "uploadBytes": 76120064, + "timeSeconds": 1.001, + "uploadBytes": 259522560, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000065124, - "uploadBytes": 76890112, + "timeSeconds": 1.001, + "uploadBytes": 257228800, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000088832, - "uploadBytes": 76824576, + "timeSeconds": 1.001, + "uploadBytes": 251396096, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000031927, - "uploadBytes": 77119488, + "timeSeconds": 1.001, + "uploadBytes": 263192576, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.00018753, - "uploadBytes": 77627392, + "timeSeconds": 1.001, + "uploadBytes": 257425408, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000062591, - "uploadBytes": 77545472, + "timeSeconds": 1.001, + "uploadBytes": 253100032, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000408915, - "uploadBytes": 78020608, + "timeSeconds": 1.001, + "uploadBytes": 262275072, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000065153, - "uploadBytes": 77643776, + "timeSeconds": 1.001, + "uploadBytes": 277544960, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000122751, - "uploadBytes": 78528512, + "timeSeconds": 1.001, + "uploadBytes": 275185664, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000630014, - "uploadBytes": 78233600, + "timeSeconds": 1.001, + "uploadBytes": 275185664, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.000560251, - "uploadBytes": 79200256, + "timeSeconds": 1.001, + "uploadBytes": 271319040, "downloadBytes": 0 }, { "type": "intermediary", - "timeSeconds": 1.00035048, - "uploadBytes": 78807040, + "timeSeconds": 1.001, + "uploadBytes": 265093120, "downloadBytes": 0 } ], - "implementation": "quic-go", - "version": "v0.34", - "transportStack": "quic-v1" + "implementation": "js-libp2p", + "version": "v1.0", + "transportStack": "tcp" }, { "result": [ { - "type": "intermediate", - "timeSeconds": 1.000077546, - "uploadBytes": 1841111, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 86310912, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000073631, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 255918080, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000084152, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 269942784, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000100572, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 268435456, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000093085, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 270598144, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000095225, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 271843328, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000092253, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 267780096, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000094138, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 273154048, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000089487, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 270270464, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000106099, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 244645888, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000101762, - "uploadBytes": 2229248, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 264765440, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000081424, - "uploadBytes": 2112553, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 255787008, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000080641, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 273678336, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000083726, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 269680640, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000086939, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 272171008, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000093019, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 272039936, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000094018, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 275316736, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000107055, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 271908864, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000093919, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 274661376, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000092717, - "uploadBytes": 3014656, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 82509824, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000070985, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 248971264, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000097999, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 258015232, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000097993, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 261226496, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000107259, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 259391488, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000081907, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 255393792, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.0001, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 261029888, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.00009275, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 254541824, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000107331, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.002, + "uploadBytes": 256835584, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000093586, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 235405312, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000084892, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 253427712, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000071035, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 257818624, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000102916, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 256638976, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000158197, - "uploadBytes": 4157440, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260702208, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000099387, - "uploadBytes": 3969024, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260374528, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000077074, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260308992, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000106345, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260571136, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000082367, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 254672896, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.00010658, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 253427712, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000100606, - "uploadBytes": 3014656, + "type": "intermediary", + "timeSeconds": 1.002, + "uploadBytes": 86704128, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000068675, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 240517120, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.00008912, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 261619712, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000082196, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 263716864, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000082815, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 262406144, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000093505, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 257818624, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000094697, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 255524864, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000083411, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 268304384, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000106511, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 269287424, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000102212, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 269877248, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000095345, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 269746176, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000079611, - "uploadBytes": 4123648, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 252968960, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000085357, - "uploadBytes": 4002816, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 265355264, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.00009891, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 268500992, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000091162, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 270204928, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000091088, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 270794752, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000093, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 270204928, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000100251, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 269484032, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000099082, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 270663680, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000123272, - "uploadBytes": 3014656, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 96600064, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.00006661, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 257490944, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000098031, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 263192576, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000091117, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 267124736, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000102561, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 270204928, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000084408, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 270467072, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.00009993, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 269549568, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000087954, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 269287424, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.00009474, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 259719168, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000094909, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 263782400, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000092117, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 269877248, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000116741, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 269877248, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000069868, - "uploadBytes": 3959808, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 267714560, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000103023, - "uploadBytes": 4166656, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 271908864, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000084936, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 271581184, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000109146, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 269352960, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000095844, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 270598144, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000097989, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 271122432, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000088875, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 267649024, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000104676, - "uploadBytes": 3014656, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 106692608, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000097109, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 262733824, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000088938, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 265420800, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000108665, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 258211840, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000081071, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 266534912, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000123896, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 274530304, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000085362, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 264568832, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000113667, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 268566528, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000086421, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 266469376, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000094559, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 251265024, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000089126, - "uploadBytes": 4179968, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 263389184, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000099855, - "uploadBytes": 3946496, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 270729216, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000081203, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 271253504, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000099256, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 274530304, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.00006776, - "uploadBytes": 3943424, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 271122432, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000093805, - "uploadBytes": 4183040, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 257884160, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000085801, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 269287424, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000093052, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 272498688, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000097145, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 264110080, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000128822, - "uploadBytes": 3014656, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 98566144, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000079197, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 272039936, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000108935, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 275316736, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000103856, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 269549568, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.00009874, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 275972096, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000099409, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 274595840, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000096945, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 277479424, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000094866, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 276955136, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000114616, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 276365312, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000094544, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 278986752, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000102674, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 282591232, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000109097, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 247005184, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000098099, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260243456, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000100857, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 282132480, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000092177, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 279445504, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000096051, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 279052288, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000107659, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 276168704, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000091028, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 279117824, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000104267, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 284229632, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000099554, - "uploadBytes": 2883584, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 77594624, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000086414, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 232062976, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000100631, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 250675200, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000094712, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 250413056, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000100829, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 252116992, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000097878, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 251461632, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000101847, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 254214144, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000098589, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 252444672, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000091333, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 250806272, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000106583, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 255066112, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000100758, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 251920384, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.00010174, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 252444672, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000093819, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.002, + "uploadBytes": 246349824, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000185774, - "uploadBytes": 3988480, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 236453888, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000103573, - "uploadBytes": 4137984, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 242941952, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000103425, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 253493248, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000080603, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 256442368, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000099526, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 257097728, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000106927, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 257687552, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000111104, - "uploadBytes": 3014656, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 56360960, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000083453, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260112384, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000091146, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 272039936, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000104303, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 274792448, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.00009554, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 275775488, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000097115, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 279642112, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000085632, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 255131648, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000091215, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 231735296, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000104242, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.002, + "uploadBytes": 239927296, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000105748, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 249430016, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000097686, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 262406144, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000085558, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 269221888, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000091388, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 269942784, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.00009432, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 281542656, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000105351, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 282263552, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000098658, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 277479424, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000102333, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 280035328, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000089514, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 276955136, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000086463, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 280756224, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000101555, - "uploadBytes": 1841111, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 77201408, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000066503, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 257359872, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000086869, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 258670592, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000134746, - "uploadBytes": 2029609, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 256049152, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000090642, - "uploadBytes": 2049024, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 250085376, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000102283, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 255197184, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000090763, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 256180224, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000090502, - "uploadBytes": 2086871, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 245628928, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000095948, - "uploadBytes": 1992704, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 253100032, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000082487, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 234553344, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000086604, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 251133952, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000079325, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 252772352, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.00010233, - "uploadBytes": 1973289, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 251658240, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000111411, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 253165568, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.00008456, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 251723776, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000079705, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 261619712, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000105799, - "uploadBytes": 1974231, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260964352, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000108752, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 256901120, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000099688, - "uploadBytes": 2105344, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 249757696, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000117044, - "uploadBytes": 2883584, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 105644032, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000084082, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 264699904, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.00007861, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 274006016, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000096452, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 279773184, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000105759, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 274792448, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000084832, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 273612800, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.00010368, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 280100864, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000094455, - "uploadBytes": 4130816, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 278134784, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000113198, - "uploadBytes": 3995648, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 283049984, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000061275, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 277020672, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.00009692, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 282722304, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000091366, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 258801664, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000095473, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 278790144, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.00009793, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 279379968, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000096988, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 283246592, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000072598, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 282198016, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000108768, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 281739264, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000090374, - "uploadBytes": 4194304, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 282853376, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000103777, - "uploadBytes": 3932160, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 279576576, "downloadBytes": 0 } ], - "implementation": "rust-libp2p", - "version": "v0.53", + "implementation": "js-libp2p", + "version": "v1.0-noise-alloc", "transportStack": "tcp" }, { "result": [ { - "type": "intermediate", - "timeSeconds": 1.000181756, - "uploadBytes": 35190623, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 76808192, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000383985, - "uploadBytes": 74175379, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 241041408, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000283036, - "uploadBytes": 69063634, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 254148608, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000075754, - "uploadBytes": 77147931, + "type": "intermediary", + "timeSeconds": 1.002, + "uploadBytes": 249167872, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000218645, - "uploadBytes": 72381421, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 254803968, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999874425, - "uploadBytes": 75123918, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 253820928, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000238423, - "uploadBytes": 69293200, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 255852544, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000287416, - "uploadBytes": 76654300, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 255655936, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000143538, - "uploadBytes": 73395830, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 257163264, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999825969, - "uploadBytes": 73043745, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 253689856, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000213891, - "uploadBytes": 71065446, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 255262720, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999691754, - "uploadBytes": 71963472, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 256442368, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000305507, - "uploadBytes": 75190257, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 239075328, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000220472, - "uploadBytes": 73970663, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 253362176, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999753413, - "uploadBytes": 72263072, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 251396096, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999840277, - "uploadBytes": 74618953, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 250871808, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999709148, - "uploadBytes": 74090199, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 254214144, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.0001674, - "uploadBytes": 71650086, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 257032192, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000283091, - "uploadBytes": 71089534, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 256507904, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000185688, - "uploadBytes": 35441415, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 81199104, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999998766, - "uploadBytes": 72840243, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 246480896, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000357302, - "uploadBytes": 71493505, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 255983616, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000065666, - "uploadBytes": 73780581, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260308992, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000164093, - "uploadBytes": 72914708, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260374528, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999905481, - "uploadBytes": 72319613, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260702208, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999984647, - "uploadBytes": 73378079, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260046848, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999941496, - "uploadBytes": 73669828, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260440064, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000158181, - "uploadBytes": 70297954, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 252444672, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000331425, - "uploadBytes": 74625874, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 252575744, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000142076, - "uploadBytes": 71410205, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260440064, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999943864, - "uploadBytes": 74895879, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 259588096, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.99992565, - "uploadBytes": 71000294, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 259129344, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000144358, - "uploadBytes": 73234453, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260898816, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000053193, - "uploadBytes": 72409968, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 261095424, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000427465, - "uploadBytes": 75162541, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260964352, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999816615, - "uploadBytes": 73860164, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 261029888, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000156615, - "uploadBytes": 71649904, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260702208, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000434809, - "uploadBytes": 73494945, + "type": "intermediary", + "timeSeconds": 1.012, + "uploadBytes": 234487808, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000139083, - "uploadBytes": 32971374, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 96403456, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000227399, - "uploadBytes": 72722995, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 247332864, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999964541, - "uploadBytes": 69455128, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 267386880, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999998467, - "uploadBytes": 71705028, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 268632064, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999830772, - "uploadBytes": 75371523, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 270139392, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000015604, - "uploadBytes": 68362880, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 269811712, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000176316, - "uploadBytes": 76449424, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 270401536, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000205614, - "uploadBytes": 68184868, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 270532608, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000414889, - "uploadBytes": 73646819, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 270401536, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000187626, - "uploadBytes": 71699984, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 266338304, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000201024, - "uploadBytes": 72013672, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 253886464, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999794149, - "uploadBytes": 71874908, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 263716864, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000190395, - "uploadBytes": 72400839, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 270008320, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000263335, - "uploadBytes": 74672065, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 268763136, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000209365, - "uploadBytes": 70502150, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 269418496, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999820499, - "uploadBytes": 71920358, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 261554176, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999813632, - "uploadBytes": 72167984, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 268697600, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000238455, - "uploadBytes": 71761590, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 264699904, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000393094, - "uploadBytes": 73946802, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 257228800, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000091032, - "uploadBytes": 35664959, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 82051072, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000115198, - "uploadBytes": 68455194, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 245956608, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000153886, - "uploadBytes": 75469446, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 267780096, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.99968823, - "uploadBytes": 74125005, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 268107776, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000217597, - "uploadBytes": 71257782, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 276037632, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000183849, - "uploadBytes": 72570306, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 272695296, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999974364, - "uploadBytes": 69355449, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 266403840, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000427591, - "uploadBytes": 76253203, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 267386880, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999878256, - "uploadBytes": 68819311, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 275251200, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999856503, - "uploadBytes": 75143954, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 274726912, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.00018744, - "uploadBytes": 72239978, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 272564224, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999918093, - "uploadBytes": 72947098, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 271646720, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.99989209, - "uploadBytes": 70668753, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 255197184, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000243314, - "uploadBytes": 75035474, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 275972096, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000280499, - "uploadBytes": 70998620, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 275972096, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000193056, - "uploadBytes": 73799178, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 275775488, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000316788, - "uploadBytes": 72997523, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 268959744, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999771772, - "uploadBytes": 72769362, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260374528, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000280792, - "uploadBytes": 71754282, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 261095424, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000058872, - "uploadBytes": 32480772, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 85065728, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999764303, - "uploadBytes": 74236493, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 253165568, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999791572, - "uploadBytes": 72261393, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 256180224, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999896947, - "uploadBytes": 71315145, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 259129344, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000361402, - "uploadBytes": 75235579, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 259653632, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.99981008, - "uploadBytes": 71645543, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 259981312, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000248785, - "uploadBytes": 71093135, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 259981312, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000344904, - "uploadBytes": 72970807, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260177920, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999925068, - "uploadBytes": 73730598, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260308992, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000028833, - "uploadBytes": 74926516, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260112384, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999735866, - "uploadBytes": 72164644, + "type": "intermediary", + "timeSeconds": 1.004, + "uploadBytes": 256049152, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000291899, - "uploadBytes": 70877450, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 256770048, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999946268, - "uploadBytes": 74631474, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 258015232, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999883294, - "uploadBytes": 73555940, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260046848, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000034152, - "uploadBytes": 70098586, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 259981312, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000227801, - "uploadBytes": 75910724, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 259850240, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000051627, - "uploadBytes": 70962455, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 259784704, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000127276, - "uploadBytes": 73892096, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 259915776, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999977899, - "uploadBytes": 70928444, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260112384, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000263244, - "uploadBytes": 33352929, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 85983232, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000133724, - "uploadBytes": 75257564, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 253231104, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.99997531, - "uploadBytes": 68813075, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260505600, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999955716, - "uploadBytes": 75247100, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 262209536, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000144438, - "uploadBytes": 70146354, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 263716864, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000170236, - "uploadBytes": 73385017, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 263913472, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999671332, - "uploadBytes": 76215256, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 264175616, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000048351, - "uploadBytes": 69015923, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 264044544, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000298898, - "uploadBytes": 74345558, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 262930432, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000107033, - "uploadBytes": 72710405, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 262078464, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999771145, - "uploadBytes": 71964690, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 264044544, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999787201, - "uploadBytes": 71575512, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 256245760, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999640114, - "uploadBytes": 75530188, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 256245760, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999867472, - "uploadBytes": 73871481, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 261095424, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000412335, - "uploadBytes": 71803601, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 259457024, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999948611, - "uploadBytes": 69863868, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 248053760, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000432199, - "uploadBytes": 73728544, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 262602752, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000159093, - "uploadBytes": 72846129, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 263913472, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999678027, - "uploadBytes": 72957758, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 264110080, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000305914, - "uploadBytes": 35333796, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 103940096, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000115835, - "uploadBytes": 72637781, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 265879552, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999903319, - "uploadBytes": 74173750, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 278200320, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999798267, - "uploadBytes": 71900281, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 281804800, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000327174, - "uploadBytes": 71595930, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 284098560, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000275255, - "uploadBytes": 72906470, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 281804800, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000223136, - "uploadBytes": 73976647, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 283049984, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000011797, - "uploadBytes": 72998306, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 277676032, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999882376, - "uploadBytes": 72958302, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 219021312, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000065492, - "uploadBytes": 68645138, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 236060672, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000189538, - "uploadBytes": 76198015, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 244121600, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999744242, - "uploadBytes": 69993419, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 256180224, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.99971254, - "uploadBytes": 76079791, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 264699904, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999790651, - "uploadBytes": 70071364, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 272039936, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999737288, - "uploadBytes": 75837710, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 268107776, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999694625, - "uploadBytes": 70869542, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 279511040, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000338781, - "uploadBytes": 71212004, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 279248896, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000260607, - "uploadBytes": 75435450, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 277741568, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000004796, - "uploadBytes": 70139447, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 281214976, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.00036748, - "uploadBytes": 31960517, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 72810496, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999970506, - "uploadBytes": 75630923, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 257556480, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000220897, - "uploadBytes": 68594409, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 249757696, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000225839, - "uploadBytes": 74289230, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 248250368, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000279347, - "uploadBytes": 70536411, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 250740736, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000060897, - "uploadBytes": 73700211, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 248250368, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000056339, - "uploadBytes": 72885463, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 250281984, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.00014143, - "uploadBytes": 71730437, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 241106944, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999857925, - "uploadBytes": 72267439, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 240910336, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999897029, - "uploadBytes": 73071538, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 265093120, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000395369, - "uploadBytes": 73372053, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 256507904, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999938645, - "uploadBytes": 69693714, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 258080768, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000135012, - "uploadBytes": 73928933, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 261160960, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000150788, - "uploadBytes": 72861214, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 262799360, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999677846, - "uploadBytes": 72868469, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260833280, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000225851, - "uploadBytes": 70935440, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 260374528, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999762, - "uploadBytes": 73113367, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 261750784, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000374689, - "uploadBytes": 73238684, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 269746176, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999810359, - "uploadBytes": 73068116, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 262930432, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000346216, - "uploadBytes": 36853802, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 92405760, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000240977, - "uploadBytes": 71250221, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 258080768, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000078628, - "uploadBytes": 73574307, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 262995968, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000055278, - "uploadBytes": 73334835, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 268107776, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000073166, - "uploadBytes": 70739553, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 268173312, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999965023, - "uploadBytes": 71809296, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 269287424, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999796135, - "uploadBytes": 74072104, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 270139392, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.99980769, - "uploadBytes": 73773825, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 269352960, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999718947, - "uploadBytes": 73363752, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 269549568, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000319105, - "uploadBytes": 71894773, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 267714560, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999919486, - "uploadBytes": 75726472, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 267780096, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999733279, - "uploadBytes": 70871128, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 253820928, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999734419, - "uploadBytes": 75946838, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 250609664, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000377343, - "uploadBytes": 72691396, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 263913472, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000293891, - "uploadBytes": 70751802, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 265551872, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000213311, - "uploadBytes": 74489889, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 268763136, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999693681, - "uploadBytes": 72952424, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 268500992, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999720388, - "uploadBytes": 71007593, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 268697600, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000318317, - "uploadBytes": 75506012, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 269418496, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.0003358, - "uploadBytes": 32891145, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 86704128, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000088137, - "uploadBytes": 72472019, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 252051456, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999648602, - "uploadBytes": 74015238, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 255655936, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.00007452, - "uploadBytes": 72821809, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 256966656, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000271129, - "uploadBytes": 71236372, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 259719168, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999725741, - "uploadBytes": 71454325, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 259063808, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000168659, - "uploadBytes": 73513233, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 269746176, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.00029109, - "uploadBytes": 68911816, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 261488640, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000385558, - "uploadBytes": 72513910, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 264896512, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999879618, - "uploadBytes": 74723454, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 251396096, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999797237, - "uploadBytes": 68806892, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 233832448, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000190156, - "uploadBytes": 74955124, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 259457024, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.99988745, - "uploadBytes": 70576190, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 264634368, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000345891, - "uploadBytes": 75796031, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 267321344, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000076246, - "uploadBytes": 72932247, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 265551872, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000125118, - "uploadBytes": 67745409, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 268697600, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000150512, - "uploadBytes": 74945054, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 265027584, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 1.000345892, - "uploadBytes": 69460126, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 255852544, "downloadBytes": 0 }, { - "type": "intermediate", - "timeSeconds": 0.999911083, - "uploadBytes": 74899530, + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 267452416, "downloadBytes": 0 } ], - "implementation": "rust-libp2p", - "version": "v0.53", - "transportStack": "quic-v1" - }, + "implementation": "js-libp2p", + "version": "v1.0-noise-alloc-smart", + "transportStack": "tcp" + } + ], + "parameters": { + "uploadBytes": 9007199254740991, + "downloadBytes": 0 + } + }, + { + "name": "throughput/download", + "unit": "bit/s", + "results": [ { "result": [ { "type": "intermediary", - "timeSeconds": 1.000036054, - "uploadBytes": 169869312, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 63045632 }, { "type": "intermediary", - "timeSeconds": 1.067806261, - "uploadBytes": 609058816, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 250937332 }, { "type": "intermediary", - "timeSeconds": 1.000053148, - "uploadBytes": 624492544, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 250740736 }, { "type": "intermediary", - "timeSeconds": 1.00000754, - "uploadBytes": 545816576, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 253493260 }, { "type": "intermediary", - "timeSeconds": 1.000018808, - "uploadBytes": 639959040, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 252772352 }, { "type": "intermediary", - "timeSeconds": 1.090189721, - "uploadBytes": 478674944, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 251592704 }, { "type": "intermediary", - "timeSeconds": 1.000006033, - "uploadBytes": 492175360, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 256245760 }, { "type": "intermediary", - "timeSeconds": 1.000010498, - "uploadBytes": 338886656, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 257425408 }, { "type": "intermediary", - "timeSeconds": 1.056136647, - "uploadBytes": 336560128, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 256770048 }, { "type": "intermediary", - "timeSeconds": 1.070822389, - "uploadBytes": 365133824, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 247332864 }, { "type": "intermediary", - "timeSeconds": 1.063458945, - "uploadBytes": 371949568, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 238419956 }, { "type": "intermediary", - "timeSeconds": 1.037298521, - "uploadBytes": 369033216, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 252117004 }, { "type": "intermediary", - "timeSeconds": 1.002917767, - "uploadBytes": 363200512, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 250478592 }, { "type": "intermediary", - "timeSeconds": 1.000018396, - "uploadBytes": 324141056, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 254279680 }, { "type": "intermediary", - "timeSeconds": 1.230664974, - "uploadBytes": 190808064, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 250478580 }, { "type": "intermediary", - "timeSeconds": 1.238517221, - "uploadBytes": 241467392, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 252313600 }, { "type": "intermediary", - "timeSeconds": 1.220977618, - "uploadBytes": 247660544, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 245694476 }, { "type": "intermediary", - "timeSeconds": 1.18107408, - "uploadBytes": 243793920, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 242810880 }, { "type": "intermediary", - "timeSeconds": 1.000031514, - "uploadBytes": 174718976, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 254869504 }, { "type": "intermediary", - "timeSeconds": 1.030863678, - "uploadBytes": 605978624, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 50790400 }, { "type": "intermediary", - "timeSeconds": 1.044317226, - "uploadBytes": 623116288, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 214564864 }, { "type": "intermediary", - "timeSeconds": 1.069392725, - "uploadBytes": 637861888, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 243728384 }, { "type": "intermediary", - "timeSeconds": 1.031937463, - "uploadBytes": 615645184, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 271908864 }, { "type": "intermediary", - "timeSeconds": 1.048399555, - "uploadBytes": 625475584, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265814016 }, { "type": "intermediary", - "timeSeconds": 1.0000102, - "uploadBytes": 642646016, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263913472 }, { "type": "intermediary", - "timeSeconds": 1.01096807, - "uploadBytes": 556957696, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 269942784 }, { "type": "intermediary", - "timeSeconds": 1.052179092, - "uploadBytes": 627802112, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 272171008 }, { "type": "intermediary", - "timeSeconds": 1.000007123, - "uploadBytes": 626950144, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 269156352 }, { "type": "intermediary", - "timeSeconds": 1.07290316, - "uploadBytes": 609615872, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 261423104 }, { "type": "intermediary", - "timeSeconds": 1.000000657, - "uploadBytes": 623869952, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 248446964 }, { "type": "intermediary", - "timeSeconds": 1.083471134, - "uploadBytes": 618987520, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 248315916 }, { "type": "intermediary", - "timeSeconds": 1.00001114, - "uploadBytes": 623149056, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 250544128 }, { "type": "intermediary", - "timeSeconds": 1.086556349, - "uploadBytes": 621608960, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270008320 }, { "type": "intermediary", - "timeSeconds": 1.000001431, - "uploadBytes": 613744640, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266469376 }, { "type": "intermediary", - "timeSeconds": 1.063898517, - "uploadBytes": 594903040, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 256966656 }, { "type": "intermediary", - "timeSeconds": 1.000011123, - "uploadBytes": 627343360, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 261160948 }, { "type": "intermediary", - "timeSeconds": 1.068554927, - "uploadBytes": 606732288, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 269746188 }, { "type": "intermediary", - "timeSeconds": 1.008126312, - "uploadBytes": 59342848, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270139392 }, { "type": "intermediary", - "timeSeconds": 1.000013303, - "uploadBytes": 621412352, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 67436544 }, { "type": "intermediary", - "timeSeconds": 1.000002913, - "uploadBytes": 585629696, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 261816320 }, { "type": "intermediary", - "timeSeconds": 1.00000706, - "uploadBytes": 632389632, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270336000 }, { "type": "intermediary", - "timeSeconds": 1.060817143, - "uploadBytes": 595361792, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 276299776 }, { "type": "intermediary", - "timeSeconds": 1.000000674, - "uploadBytes": 601522176, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 271384576 }, { "type": "intermediary", - "timeSeconds": 1.029318564, - "uploadBytes": 609189888, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 275906560 }, { "type": "intermediary", - "timeSeconds": 1.034631057, - "uploadBytes": 617218048, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 244776960 }, { "type": "intermediary", - "timeSeconds": 1.027908437, - "uploadBytes": 613220352, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 243859456 }, { "type": "intermediary", - "timeSeconds": 1.025164157, - "uploadBytes": 611516416, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 278528000 }, { "type": "intermediary", - "timeSeconds": 1.051425291, - "uploadBytes": 627277824, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262340608 }, { "type": "intermediary", - "timeSeconds": 1.029672044, - "uploadBytes": 614236160, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 251985920 }, { "type": "intermediary", - "timeSeconds": 1.034312763, - "uploadBytes": 617119744, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 282787840 }, { "type": "intermediary", - "timeSeconds": 1.031829529, - "uploadBytes": 615481344, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270663680 }, { "type": "intermediary", - "timeSeconds": 1.034971599, - "uploadBytes": 617316352, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 272039936 }, { "type": "intermediary", - "timeSeconds": 1.000031712, - "uploadBytes": 632553472, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270663680 }, { "type": "intermediary", - "timeSeconds": 1.000032087, - "uploadBytes": 586776576, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 259522560 }, { "type": "intermediary", - "timeSeconds": 1.000008502, - "uploadBytes": 582844416, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263389172 }, { "type": "intermediary", - "timeSeconds": 1.001206994, - "uploadBytes": 584810496, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 240254988 }, { "type": "intermediary", - "timeSeconds": 1.000007316, - "uploadBytes": 185958400, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 256901120 }, { "type": "intermediary", - "timeSeconds": 1.051458122, - "uploadBytes": 598900736, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 56950784 }, { "type": "intermediary", - "timeSeconds": 1.000000016, - "uploadBytes": 637140992, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 249430016 }, { "type": "intermediary", - "timeSeconds": 1.000031983, - "uploadBytes": 569769984, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 242941952 }, { "type": "intermediary", - "timeSeconds": 1.000009964, - "uploadBytes": 592773120, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 249102336 }, { "type": "intermediary", - "timeSeconds": 1.012863096, - "uploadBytes": 594247680, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 248971264 }, { "type": "intermediary", - "timeSeconds": 1.061159275, - "uploadBytes": 632979456, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263979008 }, { "type": "intermediary", - "timeSeconds": 1.000048364, - "uploadBytes": 606306304, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 243793920 }, { "type": "intermediary", - "timeSeconds": 1.002318864, - "uploadBytes": 588120064, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 245497844 }, { "type": "intermediary", - "timeSeconds": 1.030780254, - "uploadBytes": 614924288, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 243138572 }, { "type": "intermediary", - "timeSeconds": 1.025138315, - "uploadBytes": 611418112, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 259653632 }, { "type": "intermediary", - "timeSeconds": 1.000014119, - "uploadBytes": 609681408, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 267976704 }, { "type": "intermediary", - "timeSeconds": 1.000020931, - "uploadBytes": 623181824, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 258211840 }, { "type": "intermediary", - "timeSeconds": 1.030414066, - "uploadBytes": 575045632, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 252837888 }, { "type": "intermediary", - "timeSeconds": 1.00001754, - "uploadBytes": 623378432, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 248250368 }, { "type": "intermediary", - "timeSeconds": 1.050350368, - "uploadBytes": 599818240, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 269549568 }, { "type": "intermediary", - "timeSeconds": 1.000007375, - "uploadBytes": 621740032, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270073856 }, { "type": "intermediary", - "timeSeconds": 1.065786697, - "uploadBytes": 610598912, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 271581184 }, { "type": "intermediary", - "timeSeconds": 1.000007762, - "uploadBytes": 623738880, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 271646720 }, { "type": "intermediary", - "timeSeconds": 1.00001727, - "uploadBytes": 200802304, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 260308992 }, { "type": "intermediary", - "timeSeconds": 1.000023957, - "uploadBytes": 557711360, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 73793536 }, { "type": "intermediary", - "timeSeconds": 1.000010835, - "uploadBytes": 481263616, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266272768 }, { "type": "intermediary", - "timeSeconds": 1.175628681, - "uploadBytes": 192872448, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 255983604 }, { "type": "intermediary", - "timeSeconds": 1.168667791, - "uploadBytes": 227540992, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 254935040 }, { "type": "intermediary", - "timeSeconds": 1.193442055, - "uploadBytes": 223477760, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 246022144 }, { "type": "intermediary", - "timeSeconds": 1.173087433, - "uploadBytes": 163151872, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 253034508 }, { "type": "intermediary", - "timeSeconds": 1.000018214, - "uploadBytes": 126255104, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 258080768 }, { "type": "intermediary", - "timeSeconds": 1.405648301, - "uploadBytes": 144998400, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 255393792 }, { "type": "intermediary", - "timeSeconds": 1.356650325, - "uploadBytes": 157351936, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263323648 }, { "type": "intermediary", - "timeSeconds": 1.32927457, - "uploadBytes": 159055872, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 252641280 }, { "type": "intermediary", - "timeSeconds": 1.296130945, - "uploadBytes": 158629888, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 246939648 }, { "type": "intermediary", - "timeSeconds": 1.281159358, - "uploadBytes": 158859264, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 246808576 }, { "type": "intermediary", - "timeSeconds": 1.279773274, - "uploadBytes": 160202752, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 259719168 }, { "type": "intermediary", - "timeSeconds": 1.2684417479999999, - "uploadBytes": 159580160, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 258605044 }, { "type": "intermediary", - "timeSeconds": 1.261762412, - "uploadBytes": 159907840, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 268369932 }, { "type": "intermediary", - "timeSeconds": 1.000005292, - "uploadBytes": 115933184, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 257425408 }, { "type": "intermediary", - "timeSeconds": 1.000000659, - "uploadBytes": 596672512, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 251002868 }, { "type": "intermediary", - "timeSeconds": 1.056338781, - "uploadBytes": 453279744, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 257556492 }, { "type": "intermediary", - "timeSeconds": 1.000002221, - "uploadBytes": 453640192, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 261226496 }, { "type": "intermediary", - "timeSeconds": 1.169488465, - "uploadBytes": 351961088, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 32768000 }, { "type": "intermediary", - "timeSeconds": 1.1389585979999999, - "uploadBytes": 245465088, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 225574912 }, { "type": "intermediary", - "timeSeconds": 1.110896739, - "uploadBytes": 248446976, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 247988224 }, { "type": "intermediary", - "timeSeconds": 1.074444589, - "uploadBytes": 246480896, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 251592704 }, { "type": "intermediary", - "timeSeconds": 1.058294331, - "uploadBytes": 249757696, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 258146304 }, { "type": "intermediary", - "timeSeconds": 1.055196567, - "uploadBytes": 252149760, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 256049152 }, { "type": "intermediary", - "timeSeconds": 1.021916936, - "uploadBytes": 249921536, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 252313600 }, { "type": "intermediary", - "timeSeconds": 1.01835912, - "uploadBytes": 250871808, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 255262708 }, { "type": "intermediary", - "timeSeconds": 1.019690163, - "uploadBytes": 254672896, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 250478604 }, { "type": "intermediary", - "timeSeconds": 1.022923028, - "uploadBytes": 256704512, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 256049152 }, { "type": "intermediary", - "timeSeconds": 1.007465762, - "uploadBytes": 255131648, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 256442356 }, { "type": "intermediary", - "timeSeconds": 1.004452844, - "uploadBytes": 255590400, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 256704524 }, { "type": "intermediary", - "timeSeconds": 1.002609191, - "uploadBytes": 255393792, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 257818624 }, { "type": "intermediary", - "timeSeconds": 1.008902521, - "uploadBytes": 258506752, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 256966656 }, { "type": "intermediary", - "timeSeconds": 1.000008183, - "uploadBytes": 258146304, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 257097728 }, { "type": "intermediary", - "timeSeconds": 1.021953175, - "uploadBytes": 29655040, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 257163264 }, { "type": "intermediary", - "timeSeconds": 1.000016419, - "uploadBytes": 649330688, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 257163264 }, { "type": "intermediary", - "timeSeconds": 1.000011645, - "uploadBytes": 588382208, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 257294336 }, { "type": "intermediary", - "timeSeconds": 1.000039633, - "uploadBytes": 589922304, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 257490944 }, { "type": "intermediary", - "timeSeconds": 1.068270343, - "uploadBytes": 617316352, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 53608448 }, { "type": "intermediary", - "timeSeconds": 1.000001163, - "uploadBytes": 627769344, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 225902592 }, { "type": "intermediary", - "timeSeconds": 1.000005089, - "uploadBytes": 584155136, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 248840192 }, { "type": "intermediary", - "timeSeconds": 1.016127796, - "uploadBytes": 587464704, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 252182528 }, { "type": "intermediary", - "timeSeconds": 1.047695473, - "uploadBytes": 624951296, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 253362176 }, { "type": "intermediary", - "timeSeconds": 1.080467743, - "uploadBytes": 507281408, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 258211840 }, { "type": "intermediary", - "timeSeconds": 1.027457164, - "uploadBytes": 372801536, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 252379136 }, { "type": "intermediary", - "timeSeconds": 1.053729549, - "uploadBytes": 353894400, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 254672884 }, { "type": "intermediary", - "timeSeconds": 1.043149609, - "uploadBytes": 359727104, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 243400716 }, { "type": "intermediary", - "timeSeconds": 1.032856751, - "uploadBytes": 365854720, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 238616576 }, { "type": "intermediary", - "timeSeconds": 1.028320416, - "uploadBytes": 371884032, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 243597312 }, { "type": "intermediary", - "timeSeconds": 1.00103562, - "uploadBytes": 366346240, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 243007488 }, { "type": "intermediary", - "timeSeconds": 1.016189357, - "uploadBytes": 378535936, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 258539520 }, { "type": "intermediary", - "timeSeconds": 1.000022839, - "uploadBytes": 378634240, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 251985920 }, { "type": "intermediary", - "timeSeconds": 1.150647657, - "uploadBytes": 325550080, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 252837888 }, { "type": "intermediary", - "timeSeconds": 1.000018275, - "uploadBytes": 104660992, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263651316 }, { "type": "intermediary", - "timeSeconds": 1.000019276, - "uploadBytes": 647725056, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265814028 }, { "type": "intermediary", - "timeSeconds": 1.000018011, - "uploadBytes": 608501760, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266076160 }, { "type": "intermediary", - "timeSeconds": 1.000021704, - "uploadBytes": 613810176, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 245825524 }, { "type": "intermediary", - "timeSeconds": 1.062609656, - "uploadBytes": 584122368, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 61800448 }, { "type": "intermediary", - "timeSeconds": 1.00000059, - "uploadBytes": 620756992, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 245694452 }, { "type": "intermediary", - "timeSeconds": 1.000017247, - "uploadBytes": 622624768, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 258342924 }, { "type": "intermediary", - "timeSeconds": 1.035833613, - "uploadBytes": 567574528, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 258080768 }, { "type": "intermediary", - "timeSeconds": 1.000015852, - "uploadBytes": 597950464, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 258080768 }, { "type": "intermediary", - "timeSeconds": 1.000008712, - "uploadBytes": 601686016, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 255066112 }, { "type": "intermediary", - "timeSeconds": 1.000043151, - "uploadBytes": 634322944, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 256704512 }, { "type": "intermediary", - "timeSeconds": 1.048841031, - "uploadBytes": 581533696, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 259457024 }, { "type": "intermediary", - "timeSeconds": 1.000019172, - "uploadBytes": 637829120, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 256770048 }, { "type": "intermediary", - "timeSeconds": 1.037389973, - "uploadBytes": 577437696, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 252772352 }, { "type": "intermediary", - "timeSeconds": 1.000001914, - "uploadBytes": 634617856, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 259522560 }, { "type": "intermediary", - "timeSeconds": 1.045697157, - "uploadBytes": 585826304, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 260308992 }, { "type": "intermediary", - "timeSeconds": 1.000040056, - "uploadBytes": 634978304, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 259850240 }, { "type": "intermediary", - "timeSeconds": 1.057567908, - "uploadBytes": 592510976, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 248709120 }, { "type": "intermediary", - "timeSeconds": 1.090535869, - "uploadBytes": 650543104, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 258736128 }, { "type": "intermediary", - "timeSeconds": 1.000032056, - "uploadBytes": 159088640, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 258473984 }, { "type": "intermediary", - "timeSeconds": 1.000017252, - "uploadBytes": 638025728, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 259981312 }, { "type": "intermediary", - "timeSeconds": 1.102435442, - "uploadBytes": 644841472, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 259391488 }, { "type": "intermediary", - "timeSeconds": 1.038551486, - "uploadBytes": 619479040, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 259457024 }, { "type": "intermediary", - "timeSeconds": 1.018847332, - "uploadBytes": 607780864, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 41811968 }, { "type": "intermediary", - "timeSeconds": 1.00001384, - "uploadBytes": 616562688, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 249233408 }, { "type": "intermediary", - "timeSeconds": 1.000034443, - "uploadBytes": 596017152, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 272039936 }, { "type": "intermediary", - "timeSeconds": 1.077317438, - "uploadBytes": 623280128, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263192576 }, { "type": "intermediary", - "timeSeconds": 1.00000633, - "uploadBytes": 596836352, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262209536 }, { "type": "intermediary", - "timeSeconds": 1.000020939, - "uploadBytes": 599195648, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 258080768 }, { "type": "intermediary", - "timeSeconds": 1.000032455, - "uploadBytes": 597983232, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266928128 }, { "type": "intermediary", - "timeSeconds": 1.000006956, - "uploadBytes": 645038080, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 271843328 }, { "type": "intermediary", - "timeSeconds": 1.000013633, - "uploadBytes": 583794688, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 272564224 }, { "type": "intermediary", - "timeSeconds": 1.000001974, - "uploadBytes": 583598080, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 273022976 }, { "type": "intermediary", - "timeSeconds": 1.000039665, - "uploadBytes": 581828608, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 272891904 }, { "type": "intermediary", - "timeSeconds": 1.000016835, - "uploadBytes": 591036416, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 272564224 }, { "type": "intermediary", - "timeSeconds": 1.000051739, - "uploadBytes": 599228416, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263979008 }, { "type": "intermediary", - "timeSeconds": 1.000031086, - "uploadBytes": 594575360, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 250413056 }, { "type": "intermediary", - "timeSeconds": 1.000055371, - "uploadBytes": 600440832, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 251265024 }, { "type": "intermediary", - "timeSeconds": 1.017404111, - "uploadBytes": 58458112, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 258277376 }, { "type": "intermediary", - "timeSeconds": 1.077690736, - "uploadBytes": 715096064, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270598144 }, { "type": "intermediary", - "timeSeconds": 1.000005477, - "uploadBytes": 625934336, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 271646720 }, { "type": "intermediary", - "timeSeconds": 1.000000442, - "uploadBytes": 620953600, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 271777792 }, { "type": "intermediary", - "timeSeconds": 1.000019111, - "uploadBytes": 588709888, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 69730304 }, { "type": "intermediary", - "timeSeconds": 1.000021599, - "uploadBytes": 558104576, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 233635840 }, { "type": "intermediary", - "timeSeconds": 1.000015935, - "uploadBytes": 652967936, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 253624320 }, { "type": "intermediary", - "timeSeconds": 1.000032575, - "uploadBytes": 552697856, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 261029888 }, { "type": "intermediary", - "timeSeconds": 1.000018173, - "uploadBytes": 623050752, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 269615104 }, { "type": "intermediary", - "timeSeconds": 1.102671738, - "uploadBytes": 611287040, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 256835584 }, { "type": "intermediary", - "timeSeconds": 1.035581423, - "uploadBytes": 611942400, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266272768 }, { "type": "intermediary", - "timeSeconds": 1.074595968, - "uploadBytes": 641040384, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 273285108 }, { "type": "intermediary", - "timeSeconds": 1.067895547, - "uploadBytes": 637042688, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 274399244 }, { "type": "intermediary", - "timeSeconds": 1.060700573, - "uploadBytes": 632717312, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 254214144 }, { "type": "intermediary", - "timeSeconds": 1.055433472, - "uploadBytes": 629702656, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 260374528 }, { "type": "intermediary", - "timeSeconds": 1.0693511980000001, - "uploadBytes": 637927424, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 254279680 }, { "type": "intermediary", - "timeSeconds": 1.065274127, - "uploadBytes": 635469824, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 260308992 }, { "type": "intermediary", - "timeSeconds": 1.000051536, - "uploadBytes": 661618688, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 249167872 }, { "type": "intermediary", - "timeSeconds": 1.00001269, - "uploadBytes": 557907968, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263127028 + }, + { + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262078476 + }, + { + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263979008 + }, + { + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 251592692 + }, + { + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 271515648 } ], - "implementation": "https", - "version": "v0.1", + "implementation": "js-libp2p", + "version": "v1.0", "transportStack": "tcp" }, { "result": [ { "type": "intermediary", - "timeSeconds": 1.008887069, - "uploadBytes": 8388608, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 46399488 }, { "type": "intermediary", - "timeSeconds": 1.0561891939999999, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 227803124 }, { "type": "intermediary", - "timeSeconds": 1.003392063, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 256966668 }, { "type": "intermediary", - "timeSeconds": 1.004827037, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262275072 }, { "type": "intermediary", - "timeSeconds": 1.000105883, - "uploadBytes": 112066560, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 257818624 }, { "type": "intermediary", - "timeSeconds": 1.001589579, - "uploadBytes": 106037248, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 264765440 }, { "type": "intermediary", - "timeSeconds": 1.000152031, - "uploadBytes": 115539968, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 252575744 }, { "type": "intermediary", - "timeSeconds": 1.000033937, - "uploadBytes": 105644032, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262733824 }, { "type": "intermediary", - "timeSeconds": 1.000123003, - "uploadBytes": 112656384, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 267452416 }, { "type": "intermediary", - "timeSeconds": 1.000064014, - "uploadBytes": 110034944, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 267714560 }, { "type": "intermediary", - "timeSeconds": 1.000030666, - "uploadBytes": 107020288, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 267124736 }, { "type": "intermediary", - "timeSeconds": 1.000044761, - "uploadBytes": 108331008, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 255393792 }, { "type": "intermediary", - "timeSeconds": 1.000135466, - "uploadBytes": 109248512, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 267321344 }, { "type": "intermediary", - "timeSeconds": 1.000006833, - "uploadBytes": 109838336, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 251592692 }, { "type": "intermediary", - "timeSeconds": 1.000003251, - "uploadBytes": 108855296, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 261423116 }, { "type": "intermediary", - "timeSeconds": 1.005118086, - "uploadBytes": 103350272, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265224192 }, { "type": "intermediary", - "timeSeconds": 1.000064931, - "uploadBytes": 112852992, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266993664 }, { "type": "intermediary", - "timeSeconds": 1.003682223, - "uploadBytes": 105250816, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 267452416 }, { "type": "intermediary", - "timeSeconds": 1.010027271, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262209536 }, { "type": "intermediary", - "timeSeconds": 1.024735471, - "uploadBytes": 16777216, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 37224448 }, { "type": "intermediary", - "timeSeconds": 1.011432122, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 252116992 }, { "type": "intermediary", - "timeSeconds": 1.01570106, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 253034496 }, { "type": "intermediary", - "timeSeconds": 1.008072878, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262668288 }, { "type": "intermediary", - "timeSeconds": 1.010060198, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 261292032 }, { "type": "intermediary", - "timeSeconds": 1.013801305, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 260374528 }, { "type": "intermediary", - "timeSeconds": 1.009526828, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 245760000 }, { "type": "intermediary", - "timeSeconds": 1.007331, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 255721472 }, { "type": "intermediary", - "timeSeconds": 1.002416231, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 256049152 }, { "type": "intermediary", - "timeSeconds": 1.006880402, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 252772352 }, { "type": "intermediary", - "timeSeconds": 1.015095133, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 255721460 }, { "type": "intermediary", - "timeSeconds": 1.014532833, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 256770060 }, { "type": "intermediary", - "timeSeconds": 1.017513629, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 252575744 }, { "type": "intermediary", - "timeSeconds": 1.008300586, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 252313600 }, { "type": "intermediary", - "timeSeconds": 1.012035631, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 252903424 }, { "type": "intermediary", - "timeSeconds": 1.009160926, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 256049152 }, { "type": "intermediary", - "timeSeconds": 1.00953198, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 255524864 }, { "type": "intermediary", - "timeSeconds": 1.011262263, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 261488640 }, { "type": "intermediary", - "timeSeconds": 1.013478443, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263323648 }, { "type": "intermediary", - "timeSeconds": 1.034764684, - "uploadBytes": 33554432, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 46858240 }, { "type": "intermediary", - "timeSeconds": 1.000070899, - "uploadBytes": 112197632, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 252706816 }, { "type": "intermediary", - "timeSeconds": 1.003762687, - "uploadBytes": 105906176, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 271515648 }, { "type": "intermediary", - "timeSeconds": 1.003298666, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 252968960 }, { "type": "intermediary", - "timeSeconds": 1.000091455, - "uploadBytes": 111345664, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 254410752 }, { "type": "intermediary", - "timeSeconds": 1.002131974, - "uploadBytes": 106758144, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 255459328 }, { "type": "intermediary", - "timeSeconds": 1.002717041, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265879552 }, { "type": "intermediary", - "timeSeconds": 1.00013893, - "uploadBytes": 112852992, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 255066112 }, { "type": "intermediary", - "timeSeconds": 1.000068995, - "uploadBytes": 108986368, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 257753088 }, { "type": "intermediary", - "timeSeconds": 1.000028319, - "uploadBytes": 109969408, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 257425408 }, { "type": "intermediary", - "timeSeconds": 1.000085859, - "uploadBytes": 107085824, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 236191744 }, { "type": "intermediary", - "timeSeconds": 1.004072789, - "uploadBytes": 106364928, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 248250368 }, { "type": "intermediary", - "timeSeconds": 1.002278261, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 254541824 }, { "type": "intermediary", - "timeSeconds": 1.000006707, - "uploadBytes": 115408896, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270401536 }, { "type": "intermediary", - "timeSeconds": 1.000103433, - "uploadBytes": 107151360, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 268894208 }, { "type": "intermediary", - "timeSeconds": 1.000010947, - "uploadBytes": 107413504, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 264896512 }, { "type": "intermediary", - "timeSeconds": 1.000061228, - "uploadBytes": 109445120, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 273285120 }, { "type": "intermediary", - "timeSeconds": 1.001674276, - "uploadBytes": 105840640, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 259784704 }, { "type": "intermediary", - "timeSeconds": 1.004178464, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 275316736 }, { "type": "intermediary", - "timeSeconds": 1.140925605, - "uploadBytes": 16777216, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 41549824 }, { "type": "intermediary", - "timeSeconds": 1.145140522, - "uploadBytes": 41943040, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 255000564 }, { "type": "intermediary", - "timeSeconds": 1.164524767, - "uploadBytes": 50331648, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 272826368 }, { "type": "intermediary", - "timeSeconds": 1.1619015990000001, - "uploadBytes": 50331648, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 251920396 }, { "type": "intermediary", - "timeSeconds": 1.1586549210000001, - "uploadBytes": 50331648, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262995968 }, { "type": "intermediary", - "timeSeconds": 1.1540446229999999, - "uploadBytes": 50331648, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 261488640 }, { "type": "intermediary", - "timeSeconds": 1.152609212, - "uploadBytes": 50331648, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 260374528 }, { "type": "intermediary", - "timeSeconds": 1.148895464, - "uploadBytes": 50331648, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 256376832 }, { "type": "intermediary", - "timeSeconds": 1.146871568, - "uploadBytes": 50331648, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 259325952 }, { "type": "intermediary", - "timeSeconds": 1.145316647, - "uploadBytes": 50331648, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262012916 }, { "type": "intermediary", - "timeSeconds": 1.14433241, - "uploadBytes": 50331648, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 276168716 }, { "type": "intermediary", - "timeSeconds": 1.144064814, - "uploadBytes": 50331648, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 275972096 }, { "type": "intermediary", - "timeSeconds": 1.146485208, - "uploadBytes": 50331648, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 275775488 }, { "type": "intermediary", - "timeSeconds": 1.1460990899999999, - "uploadBytes": 50331648, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 257032192 }, { "type": "intermediary", - "timeSeconds": 1.143413208, - "uploadBytes": 50331648, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 255066112 }, { "type": "intermediary", - "timeSeconds": 1.1442730540000001, - "uploadBytes": 50331648, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 254410752 }, { "type": "intermediary", - "timeSeconds": 1.143093571, - "uploadBytes": 50331648, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 255262720 }, { "type": "intermediary", - "timeSeconds": 1.025723692, - "uploadBytes": 25165824, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 276758528 }, { "type": "intermediary", - "timeSeconds": 1.005416426, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 258998272 }, { "type": "intermediary", - "timeSeconds": 1.003129337, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 74842112 }, { "type": "intermediary", - "timeSeconds": 1.000004438, - "uploadBytes": 114098176, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 238944256 }, { "type": "intermediary", - "timeSeconds": 1.000003445, - "uploadBytes": 106627072, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 253624320 }, { "type": "intermediary", - "timeSeconds": 1.00160692, - "uploadBytes": 106430464, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 255787008 }, { "type": "intermediary", - "timeSeconds": 1.000074978, - "uploadBytes": 113246208, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 267386880 }, { "type": "intermediary", - "timeSeconds": 1.001691291, - "uploadBytes": 104857600, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 269811712 }, { "type": "intermediary", - "timeSeconds": 1.000017485, - "uploadBytes": 115998720, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270073856 }, { "type": "intermediary", - "timeSeconds": 1.055976102, - "uploadBytes": 102105088, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270204928 }, { "type": "intermediary", - "timeSeconds": 1.002896072, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270336000 }, { "type": "intermediary", - "timeSeconds": 1.003660309, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 267714560 }, { "type": "intermediary", - "timeSeconds": 1.010563658, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265355264 }, { "type": "intermediary", - "timeSeconds": 1.000090691, - "uploadBytes": 112394240, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262406132 }, { "type": "intermediary", - "timeSeconds": 1.001645246, - "uploadBytes": 105709568, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270663692 }, { "type": "intermediary", - "timeSeconds": 1.005458731, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 268435456 }, { "type": "intermediary", - "timeSeconds": 1.003829558, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270598144 }, { "type": "intermediary", - "timeSeconds": 1.000003498, - "uploadBytes": 110755840, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270139380 }, { "type": "intermediary", - "timeSeconds": 1.000019757, - "uploadBytes": 110493696, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 244449292 }, { "type": "intermediary", - "timeSeconds": 1.045971187, - "uploadBytes": 25165824, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266534912 }, { "type": "intermediary", - "timeSeconds": 1.021669131, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263716864 }, { "type": "intermediary", - "timeSeconds": 1.015202557, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 63307776 }, { "type": "intermediary", - "timeSeconds": 1.022790103, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 242614272 }, { "type": "intermediary", - "timeSeconds": 1.020898507, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 264110080 }, { "type": "intermediary", - "timeSeconds": 1.00960012, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 264175616 }, { "type": "intermediary", - "timeSeconds": 1.018428441, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 264372224 }, { "type": "intermediary", - "timeSeconds": 1.017036983, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262668288 }, { "type": "intermediary", - "timeSeconds": 1.015859983, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 260964352 }, { "type": "intermediary", - "timeSeconds": 1.0221801130000001, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 267124724 }, { "type": "intermediary", - "timeSeconds": 1.013133616, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 267386892 }, { "type": "intermediary", - "timeSeconds": 1.018693579, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265748480 }, { "type": "intermediary", - "timeSeconds": 1.022759837, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266928128 }, { "type": "intermediary", - "timeSeconds": 1.013990117, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 264699904 }, { "type": "intermediary", - "timeSeconds": 1.013887735, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262340608 }, { "type": "intermediary", - "timeSeconds": 1.022797959, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 250806272 }, { "type": "intermediary", - "timeSeconds": 1.014445051, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263979008 }, { "type": "intermediary", - "timeSeconds": 1.019815657, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266928128 }, { "type": "intermediary", - "timeSeconds": 1.019621461, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266403840 }, { "type": "intermediary", - "timeSeconds": 1.019455144, - "uploadBytes": 16777216, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265355264 }, { "type": "intermediary", - "timeSeconds": 1.005592413, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 267780096 }, { "type": "intermediary", - "timeSeconds": 1.012870333, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 56098816 }, { "type": "intermediary", - "timeSeconds": 1.005579836, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 249167860 }, { "type": "intermediary", - "timeSeconds": 1.013898793, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 268107788 }, { "type": "intermediary", - "timeSeconds": 1.065613248, - "uploadBytes": 100663296, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270467072 }, { "type": "intermediary", - "timeSeconds": 1.010175964, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 261095424 }, { "type": "intermediary", - "timeSeconds": 1.017518111, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 275382272 }, { "type": "intermediary", - "timeSeconds": 1.010594467, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 268107776 + }, { "type": "intermediary", - "timeSeconds": 1.006108117, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265945076 }, { "type": "intermediary", - "timeSeconds": 1.012850215, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 276103168 }, { "type": "intermediary", - "timeSeconds": 1.005412713, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 278593548 }, { "type": "intermediary", - "timeSeconds": 1.009448271, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 276037632 }, { "type": "intermediary", - "timeSeconds": 1.006255174, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 279183360 }, { "type": "intermediary", - "timeSeconds": 1.005720306, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 279183360 }, { "type": "intermediary", - "timeSeconds": 1.005310991, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 278593536 }, { "type": "intermediary", - "timeSeconds": 1.001672198, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 276955136 }, { "type": "intermediary", - "timeSeconds": 1.014046128, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 276234240 }, { "type": "intermediary", - "timeSeconds": 1.006946638, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 271384576 }, { "type": "intermediary", - "timeSeconds": 1.04074447, - "uploadBytes": 33554432, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 277741568 }, { "type": "intermediary", - "timeSeconds": 1.000093214, - "uploadBytes": 112525312, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 277872640 }, { "type": "intermediary", - "timeSeconds": 1.010242477, - "uploadBytes": 105578496, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 60227584 }, { "type": "intermediary", - "timeSeconds": 1.007894201, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 244187136 }, { "type": "intermediary", - "timeSeconds": 1.000009253, - "uploadBytes": 100466688, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 259194880 }, { "type": "intermediary", - "timeSeconds": 1.114371272, - "uploadBytes": 84082688, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 252510208 }, { "type": "intermediary", - "timeSeconds": 1.040529931, - "uploadBytes": 67108864, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 256114688 }, { "type": "intermediary", - "timeSeconds": 1.037734941, - "uploadBytes": 67108864, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 255262720 }, { "type": "intermediary", - "timeSeconds": 1.036904685, - "uploadBytes": 67108864, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 248643584 }, { "type": "intermediary", - "timeSeconds": 1.037047596, - "uploadBytes": 67108864, - "downloadBytes": 0 + "timeSeconds": 1.002, + "uploadBytes": 0, + "downloadBytes": 251854848 }, { "type": "intermediary", - "timeSeconds": 1.033627508, - "uploadBytes": 67108864, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 245170176 }, { "type": "intermediary", - "timeSeconds": 1.032742065, - "uploadBytes": 67108864, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 246087680 }, { "type": "intermediary", - "timeSeconds": 1.030696781, - "uploadBytes": 67108864, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 260636672 }, { "type": "intermediary", - "timeSeconds": 1.029975608, - "uploadBytes": 67108864, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 259981312 }, { "type": "intermediary", - "timeSeconds": 1.028481045, - "uploadBytes": 67108864, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 259653632 }, { "type": "intermediary", - "timeSeconds": 1.029082637, - "uploadBytes": 67108864, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 261029888 }, { "type": "intermediary", - "timeSeconds": 1.027473581, - "uploadBytes": 67108864, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 259915776 }, { "type": "intermediary", - "timeSeconds": 1.025818865, - "uploadBytes": 67108864, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 261160960 }, { "type": "intermediary", - "timeSeconds": 1.02626214, - "uploadBytes": 67108864, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 261226496 }, { "type": "intermediary", - "timeSeconds": 1.020643587, - "uploadBytes": 16777216, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 260964352 }, { "type": "intermediary", - "timeSeconds": 1.004439343, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 260964352 }, { "type": "intermediary", - "timeSeconds": 1.010975504, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 67436544 }, { "type": "intermediary", - "timeSeconds": 1.012311917, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 241958912 }, { "type": "intermediary", - "timeSeconds": 1.011517933, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 269287424 }, { "type": "intermediary", - "timeSeconds": 1.008968236, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265224192 }, { "type": "intermediary", - "timeSeconds": 1.012145036, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 272367604 }, { "type": "intermediary", - "timeSeconds": 1.007966709, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 272629772 }, { "type": "intermediary", - "timeSeconds": 1.010547817, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 269090804 }, { "type": "intermediary", - "timeSeconds": 1.006897217, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266076172 }, { "type": "intermediary", - "timeSeconds": 1.005975642, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 269090816 }, { "type": "intermediary", - "timeSeconds": 1.011107436, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 269615104 }, { "type": "intermediary", - "timeSeconds": 1.010686779, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 269549568 }, { "type": "intermediary", - "timeSeconds": 1.007775145, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 267321344 }, { "type": "intermediary", - "timeSeconds": 1.010666905, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 253165568 }, { "type": "intermediary", - "timeSeconds": 1.011177117, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 267321344 }, { "type": "intermediary", - "timeSeconds": 1.010775251, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 269615104 }, { "type": "intermediary", - "timeSeconds": 1.014238052, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 261029888 }, { "type": "intermediary", - "timeSeconds": 1.0022656, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266403840 }, { "type": "intermediary", - "timeSeconds": 1.033674946, - "uploadBytes": 25165824, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265027584 }, { "type": "intermediary", - "timeSeconds": 1.006029525, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 267976704 }, { "type": "intermediary", - "timeSeconds": 1.011175419, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 70909952 }, { "type": "intermediary", - "timeSeconds": 1.004220169, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 259653632 }, { "type": "intermediary", - "timeSeconds": 1.008093394, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 252575732 }, { "type": "intermediary", - "timeSeconds": 1.00537273, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 261685260 }, { "type": "intermediary", - "timeSeconds": 1.010454387, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270467072 }, { "type": "intermediary", - "timeSeconds": 1.005584146, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266862592 }, { "type": "intermediary", - "timeSeconds": 1.001571774, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266338304 }, { "type": "intermediary", - "timeSeconds": 1.00850022, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270204928 }, { "type": "intermediary", - "timeSeconds": 1.001860744, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270598144 }, { "type": "intermediary", - "timeSeconds": 1.007750361, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 269287424 }, { "type": "intermediary", - "timeSeconds": 1.011279602, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270401536 }, { "type": "intermediary", - "timeSeconds": 1.008740049, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 268173312 }, { "type": "intermediary", - "timeSeconds": 1.006611193, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 267911168 }, { "type": "intermediary", - "timeSeconds": 1.008733436, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265224180 }, { "type": "intermediary", - "timeSeconds": 1.011176052, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 258211840 }, { "type": "intermediary", - "timeSeconds": 1.00569294, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265355276 }, { "type": "intermediary", - "timeSeconds": 1.018366155, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 268369920 + }, + { + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 267124724 + }, + { + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 259784716 } ], - "implementation": "go-libp2p", - "version": "v0.27", + "implementation": "js-libp2p", + "version": "v1.0-noise-alloc", "transportStack": "tcp" }, { "result": [ { "type": "intermediary", - "timeSeconds": 1.000186904, - "uploadBytes": 68485120, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 50987008 }, { "type": "intermediary", - "timeSeconds": 1.000180823, - "uploadBytes": 125108224, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 228196352 }, { "type": "intermediary", - "timeSeconds": 1.000026834, - "uploadBytes": 125108224, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 245891072 }, { "type": "intermediary", - "timeSeconds": 1.000051938, - "uploadBytes": 124911616, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262078464 }, { "type": "intermediary", - "timeSeconds": 1.004182335, - "uploadBytes": 125894656, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266010624 }, { "type": "intermediary", - "timeSeconds": 1.00999625, - "uploadBytes": 126550016, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 239665152 }, { "type": "intermediary", - "timeSeconds": 1.008454668, - "uploadBytes": 126615552, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 256770048 }, { "type": "intermediary", - "timeSeconds": 1.007044783, - "uploadBytes": 126418944, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263913472 }, { "type": "intermediary", - "timeSeconds": 1.006604481, - "uploadBytes": 126353408, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 259915776 }, { "type": "intermediary", - "timeSeconds": 1.008603089, - "uploadBytes": 126615552, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265420800 }, { "type": "intermediary", - "timeSeconds": 1.008094202, - "uploadBytes": 126615552, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 264372224 }, { "type": "intermediary", - "timeSeconds": 1.007943127, - "uploadBytes": 126550016, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 268238848 }, { "type": "intermediary", - "timeSeconds": 1.009157339, - "uploadBytes": 126550016, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265879552 }, { "type": "intermediary", - "timeSeconds": 1.00754124, - "uploadBytes": 126484480, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266534912 }, { "type": "intermediary", - "timeSeconds": 1.009742795, - "uploadBytes": 126484480, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 245104640 }, { "type": "intermediary", - "timeSeconds": 1.011492643, - "uploadBytes": 126812160, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 259129344 }, { "type": "intermediary", - "timeSeconds": 1.010212124, - "uploadBytes": 126550016, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 255655924 }, { "type": "intermediary", - "timeSeconds": 1.007542584, - "uploadBytes": 126484480, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 268435456 }, { "type": "intermediary", - "timeSeconds": 1.008929519, - "uploadBytes": 126746624, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266010636 }, { "type": "intermediary", - "timeSeconds": 1.000153897, - "uploadBytes": 65536000, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 50331648 }, { "type": "intermediary", - "timeSeconds": 1.014170134, - "uploadBytes": 124321792, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 233832448 }, { "type": "intermediary", - "timeSeconds": 1.000154118, - "uploadBytes": 125501440, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 260571136 }, { "type": "intermediary", - "timeSeconds": 1.000148238, - "uploadBytes": 122028032, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265158656 }, { "type": "intermediary", - "timeSeconds": 1.008560917, - "uploadBytes": 123731968, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265551872 }, { "type": "intermediary", - "timeSeconds": 1.000308205, - "uploadBytes": 126091264, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265158644 }, { "type": "intermediary", - "timeSeconds": 1.000026696, - "uploadBytes": 122028032, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263585804 }, { "type": "intermediary", - "timeSeconds": 1.006979903, - "uploadBytes": 122945536, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265879552 }, { "type": "intermediary", - "timeSeconds": 1.022411839, - "uploadBytes": 126222336, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265158656 }, { "type": "intermediary", - "timeSeconds": 1.024679254, - "uploadBytes": 126418944, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 264634368 }, { "type": "intermediary", - "timeSeconds": 1.022208964, - "uploadBytes": 126222336, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 260440052 }, { "type": "intermediary", - "timeSeconds": 1.000039632, - "uploadBytes": 125566976, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263716876 }, { "type": "intermediary", - "timeSeconds": 1.000403768, - "uploadBytes": 121765888, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262144000 }, { "type": "intermediary", - "timeSeconds": 1.019656413, - "uploadBytes": 126287872, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 264372224 }, { "type": "intermediary", - "timeSeconds": 1.000304164, - "uploadBytes": 126156800, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265814016 }, { "type": "intermediary", - "timeSeconds": 1.000031554, - "uploadBytes": 122028032, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265748468 }, { "type": "intermediary", - "timeSeconds": 1.017822176, - "uploadBytes": 125435904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 255393804 }, { "type": "intermediary", - "timeSeconds": 1.000143752, - "uploadBytes": 125698048, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262209536 }, { "type": "intermediary", - "timeSeconds": 1.000182214, - "uploadBytes": 122486784, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265486336 }, { "type": "intermediary", - "timeSeconds": 1.000352375, - "uploadBytes": 65929216, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 47906816 }, { "type": "intermediary", - "timeSeconds": 1.014196561, - "uploadBytes": 124256256, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 135462912 }, { "type": "intermediary", - "timeSeconds": 1.000100225, - "uploadBytes": 125960192, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 141492224 }, { "type": "intermediary", - "timeSeconds": 1.000217887, - "uploadBytes": 123338752, - "downloadBytes": 0 + "timeSeconds": 1.005, + "uploadBytes": 0, + "downloadBytes": 149356544 }, { "type": "intermediary", - "timeSeconds": 1.004559544, - "uploadBytes": 122486784, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 154730496 }, { "type": "intermediary", - "timeSeconds": 1.000238973, - "uploadBytes": 126156800, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 159973376 }, { "type": "intermediary", - "timeSeconds": 1.000196565, - "uploadBytes": 123404288, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 164167680 }, { "type": "intermediary", - "timeSeconds": 1.002362577, - "uploadBytes": 122093568, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 169607168 }, { "type": "intermediary", - "timeSeconds": 1.023188944, - "uploadBytes": 126418944, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 170983424 }, { "type": "intermediary", - "timeSeconds": 1.021551587, - "uploadBytes": 126484480, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 173998068 }, { "type": "intermediary", - "timeSeconds": 1.021741687, - "uploadBytes": 126418944, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 177733644 }, { "type": "intermediary", - "timeSeconds": 1.023226888, - "uploadBytes": 126550016, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 177733620 }, { "type": "intermediary", - "timeSeconds": 1.020641724, - "uploadBytes": 126418944, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 179634188 }, { "type": "intermediary", - "timeSeconds": 1.02203809, - "uploadBytes": 126418944, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 181731328 }, { "type": "intermediary", - "timeSeconds": 1.022906812, - "uploadBytes": 126550016, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 180682752 }, { "type": "intermediary", - "timeSeconds": 1.000266191, - "uploadBytes": 109707264, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 181862400 }, { "type": "intermediary", - "timeSeconds": 1.006065641, - "uploadBytes": 108855296, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 182517760 }, { "type": "intermediary", - "timeSeconds": 1.000448685, - "uploadBytes": 109182976, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 181010432 }, { "type": "intermediary", - "timeSeconds": 1.00018339, - "uploadBytes": 108199936, - "downloadBytes": 0 + "timeSeconds": 1.002, + "uploadBytes": 0, + "downloadBytes": 181272576 }, { "type": "intermediary", - "timeSeconds": 1.000257932, - "uploadBytes": 67698688, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 41222144 }, { "type": "intermediary", - "timeSeconds": 1.000022293, - "uploadBytes": 124846080, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 257359872 }, { "type": "intermediary", - "timeSeconds": 1.000172138, - "uploadBytes": 124256256, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 276758516 }, { "type": "intermediary", - "timeSeconds": 1.0077198, - "uploadBytes": 126025728, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 276234252 }, { "type": "intermediary", - "timeSeconds": 1.000319145, - "uploadBytes": 114753536, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 269549568 }, { "type": "intermediary", - "timeSeconds": 1.000333867, - "uploadBytes": 109576192, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 276168704 }, { "type": "intermediary", - "timeSeconds": 1.000320166, - "uploadBytes": 109838336, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 272957440 }, { "type": "intermediary", - "timeSeconds": 1.000076176, - "uploadBytes": 109838336, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 276234240 }, { "type": "intermediary", - "timeSeconds": 1.003888141, - "uploadBytes": 111017984, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 276692992 }, { "type": "intermediary", - "timeSeconds": 1.000729395, - "uploadBytes": 111214592, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 278331392 }, { "type": "intermediary", - "timeSeconds": 1.000088295, - "uploadBytes": 110493696, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 277938176 }, { "type": "intermediary", - "timeSeconds": 1.000252068, - "uploadBytes": 110231552, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 277348352 }, { "type": "intermediary", - "timeSeconds": 1.000066465, - "uploadBytes": 110297088, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 273678336 }, { "type": "intermediary", - "timeSeconds": 1.000262312, - "uploadBytes": 110821376, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 269942784 }, { "type": "intermediary", - "timeSeconds": 1.000480904, - "uploadBytes": 111083520, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 274333696 }, { "type": "intermediary", - "timeSeconds": 1.000210947, - "uploadBytes": 111411200, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265551872 }, { "type": "intermediary", - "timeSeconds": 1.000106483, - "uploadBytes": 112001024, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 275185664 }, { "type": "intermediary", - "timeSeconds": 1.000191403, - "uploadBytes": 111673344, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270860288 }, { "type": "intermediary", - "timeSeconds": 1.000167733, - "uploadBytes": 111673344, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 272302080 }, { "type": "intermediary", - "timeSeconds": 1.000615869, - "uploadBytes": 63766528, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 66912244 }, { "type": "intermediary", - "timeSeconds": 1.003564236, - "uploadBytes": 123666432, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262864896 }, { "type": "intermediary", - "timeSeconds": 1.000235577, - "uploadBytes": 122421248, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 267059212 }, { "type": "intermediary", - "timeSeconds": 1.000092559, - "uploadBytes": 122748928, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 268238836 }, { "type": "intermediary", - "timeSeconds": 1.000200145, - "uploadBytes": 121634816, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 264110092 }, { "type": "intermediary", - "timeSeconds": 1.000298808, - "uploadBytes": 123273216, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 271515636 }, { "type": "intermediary", - "timeSeconds": 1.000164004, - "uploadBytes": 122224640, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270598156 }, { "type": "intermediary", - "timeSeconds": 1.037188658, - "uploadBytes": 119472128, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 267583488 }, { "type": "intermediary", - "timeSeconds": 1.000074406, - "uploadBytes": 117768192, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 264765440 }, { "type": "intermediary", - "timeSeconds": 1.008404032, - "uploadBytes": 121700352, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 260767744 }, { "type": "intermediary", - "timeSeconds": 1.000214627, - "uploadBytes": 125173760, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 249167872 }, { "type": "intermediary", - "timeSeconds": 1.000029679, - "uploadBytes": 119996416, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 255262720 }, { "type": "intermediary", - "timeSeconds": 1.000214148, - "uploadBytes": 125108224, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 271122432 }, { "type": "intermediary", - "timeSeconds": 1.000259277, - "uploadBytes": 119799808, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270401536 }, { "type": "intermediary", - "timeSeconds": 1.000258685, - "uploadBytes": 125304832, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266731520 }, { "type": "intermediary", - "timeSeconds": 1.000028933, - "uploadBytes": 120061952, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266993664 }, { "type": "intermediary", - "timeSeconds": 1.000131585, - "uploadBytes": 125042688, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 268173312 }, { "type": "intermediary", - "timeSeconds": 1.000255093, - "uploadBytes": 119930880, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 272039936 }, { "type": "intermediary", - "timeSeconds": 1.00016419, - "uploadBytes": 124780544, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266731508 }, { "type": "intermediary", - "timeSeconds": 1.007278611, - "uploadBytes": 68943872, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 69009408 }, { "type": "intermediary", - "timeSeconds": 1.004867439, - "uploadBytes": 126222336, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005746457, - "uploadBytes": 126353408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004513581, - "uploadBytes": 126222336, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000773151, - "uploadBytes": 110886912, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010590516, - "uploadBytes": 123273216, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006467425, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005060796, - "uploadBytes": 126287872, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005221329, - "uploadBytes": 126287872, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000699174, - "uploadBytes": 101974016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000406974, - "uploadBytes": 77070336, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000555754, - "uploadBytes": 77201408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000427189, - "uploadBytes": 77463552, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000245218, - "uploadBytes": 77594624, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000067884, - "uploadBytes": 77856768, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000092067, - "uploadBytes": 78118912, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000433671, - "uploadBytes": 78315520, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000377804, - "uploadBytes": 78577664, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000026722, - "uploadBytes": 78905344, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003199114, - "uploadBytes": 66387968, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 260243456 }, { "type": "intermediary", - "timeSeconds": 1.003115673, - "uploadBytes": 123731968, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 283312128 }, { "type": "intermediary", - "timeSeconds": 1.000357096, - "uploadBytes": 125894656, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 284164096 }, { "type": "intermediary", - "timeSeconds": 1.000058761, - "uploadBytes": 123731968, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 277348352 }, { "type": "intermediary", - "timeSeconds": 1.000328863, - "uploadBytes": 122421248, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 274792448 }, { "type": "intermediary", - "timeSeconds": 1.017252667, - "uploadBytes": 125829120, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 282394624 }, { "type": "intermediary", - "timeSeconds": 1.00021827, - "uploadBytes": 126156800, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 281083904 }, { "type": "intermediary", - "timeSeconds": 1.000239575, - "uploadBytes": 123797504, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 282132480 }, { "type": "intermediary", - "timeSeconds": 1.000012327, - "uploadBytes": 122421248, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 260243456 }, { "type": "intermediary", - "timeSeconds": 1.017285358, - "uploadBytes": 125566976, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 271450112 }, { "type": "intermediary", - "timeSeconds": 1.019923957, - "uploadBytes": 126418944, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 269877248 }, { "type": "intermediary", - "timeSeconds": 1.019393491, - "uploadBytes": 126287872, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 279314432 }, { "type": "intermediary", - "timeSeconds": 1.019071813, - "uploadBytes": 126287872, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 258539520 }, { "type": "intermediary", - "timeSeconds": 1.01936927, - "uploadBytes": 126287872, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 275709952 }, { "type": "intermediary", - "timeSeconds": 1.018991135, - "uploadBytes": 126287872, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 261029888 }, { "type": "intermediary", - "timeSeconds": 1.02190362, - "uploadBytes": 126418944, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265551872 }, { "type": "intermediary", - "timeSeconds": 1.019043238, - "uploadBytes": 126287872, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 277610496 }, { "type": "intermediary", - "timeSeconds": 1.020638786, - "uploadBytes": 126418944, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 267190272 }, { "type": "intermediary", - "timeSeconds": 1.01952774, - "uploadBytes": 126222336, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 59506676 }, { "type": "intermediary", - "timeSeconds": 1.002731881, - "uploadBytes": 63635456, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 246808588 }, { "type": "intermediary", - "timeSeconds": 1.000007845, - "uploadBytes": 123600896, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263258112 }, { "type": "intermediary", - "timeSeconds": 1.00735225, - "uploadBytes": 121307136, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 260374528 }, { "type": "intermediary", - "timeSeconds": 1.000002239, - "uploadBytes": 123404288, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 249364480 }, { "type": "intermediary", - "timeSeconds": 1.00644066, - "uploadBytes": 121307136, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 264175604 }, { "type": "intermediary", - "timeSeconds": 1.000295224, - "uploadBytes": 123666432, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 255459340 }, { "type": "intermediary", - "timeSeconds": 1.000999752, - "uploadBytes": 82182144, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263061504 }, { "type": "intermediary", - "timeSeconds": 1.001769372, - "uploadBytes": 74711040, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265420800 }, { "type": "intermediary", - "timeSeconds": 1.000269705, - "uploadBytes": 75694080, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265551860 }, { "type": "intermediary", - "timeSeconds": 1.000153675, - "uploadBytes": 75235328, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265748492 }, { "type": "intermediary", - "timeSeconds": 1.000011096, - "uploadBytes": 76021760, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266141696 }, { "type": "intermediary", - "timeSeconds": 1.001179529, - "uploadBytes": 75628544, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266141684 }, { "type": "intermediary", - "timeSeconds": 1.000335238, - "uploadBytes": 76152832, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265093120 }, { "type": "intermediary", - "timeSeconds": 1.001321112, - "uploadBytes": 76152832, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266338316 }, { "type": "intermediary", - "timeSeconds": 1.000381454, - "uploadBytes": 76283904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 264568832 }, { "type": "intermediary", - "timeSeconds": 1.001207388, - "uploadBytes": 76808192, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262275072 }, { "type": "intermediary", - "timeSeconds": 1.00057949, - "uploadBytes": 76611584, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265945088 }, { "type": "intermediary", - "timeSeconds": 1.001392948, - "uploadBytes": 77398016, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265682944 }, { "type": "intermediary", - "timeSeconds": 1.000624937, - "uploadBytes": 76873728, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 29687808 }, { "type": "intermediary", - "timeSeconds": 1.001553573, - "uploadBytes": 66453504, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 234225664 }, { "type": "intermediary", - "timeSeconds": 1.001482039, - "uploadBytes": 123797504, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270139392 }, { "type": "intermediary", - "timeSeconds": 1.000328456, - "uploadBytes": 126156800, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 272367616 }, { "type": "intermediary", - "timeSeconds": 1.008068221, - "uploadBytes": 124190720, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 272105460 }, { "type": "intermediary", - "timeSeconds": 1.000145939, - "uploadBytes": 124583936, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270663692 }, { "type": "intermediary", - "timeSeconds": 1.000046157, - "uploadBytes": 115539968, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262209536 }, { "type": "intermediary", - "timeSeconds": 1.00002136, - "uploadBytes": 108396544, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266862592 }, { "type": "intermediary", - "timeSeconds": 1.000364114, - "uploadBytes": 108724224, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 257032192 }, { "type": "intermediary", - "timeSeconds": 1.000087782, - "uploadBytes": 109117440, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 257556468 }, { "type": "intermediary", - "timeSeconds": 1.000348788, - "uploadBytes": 110231552, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263716876 }, { "type": "intermediary", - "timeSeconds": 1.000024819, - "uploadBytes": 108920832, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 267911168 }, { "type": "intermediary", - "timeSeconds": 1.00010181, - "uploadBytes": 109051904, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270139380 }, { "type": "intermediary", - "timeSeconds": 1.000457725, - "uploadBytes": 110034944, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 264241164 }, { "type": "intermediary", - "timeSeconds": 1.000272191, - "uploadBytes": 110231552, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 271581172 }, { "type": "intermediary", - "timeSeconds": 1.000089663, - "uploadBytes": 109510656, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265879564 }, { "type": "intermediary", - "timeSeconds": 1.000284918, - "uploadBytes": 110624768, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 260374528 }, { "type": "intermediary", - "timeSeconds": 1.000174052, - "uploadBytes": 110886912, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 261160960 }, { "type": "intermediary", - "timeSeconds": 1.000033803, - "uploadBytes": 110100480, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 266665984 }, { "type": "intermediary", - "timeSeconds": 1.000046873, - "uploadBytes": 111017984, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 63832064 }, { "type": "intermediary", - "timeSeconds": 1.000535964, - "uploadBytes": 63766528, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 258408448 }, { "type": "intermediary", - "timeSeconds": 1.004763792, - "uploadBytes": 123600896, - "downloadBytes": 0 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 247398400 }, { "type": "intermediary", - "timeSeconds": 1.000084844, - "uploadBytes": 123273216, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.0000703, - "uploadBytes": 121503744, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000136177, - "uploadBytes": 121700352, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003409621, - "uploadBytes": 122945536, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000118458, - "uploadBytes": 121438208, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000215752, - "uploadBytes": 122814464, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014645763, - "uploadBytes": 124256256, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006458415, - "uploadBytes": 108724224, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000143958, - "uploadBytes": 124256256, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007526172, - "uploadBytes": 120782848, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000182084, - "uploadBytes": 124125184, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00615394, - "uploadBytes": 120848384, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000029644, - "uploadBytes": 123994112, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006169236, - "uploadBytes": 120913920, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000118678, - "uploadBytes": 123994112, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006236814, - "uploadBytes": 120782848, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00021579, - "uploadBytes": 124321792, - "downloadBytes": 0 - } - ], - "implementation": "go-libp2p", - "version": "v0.27", - "transportStack": "quic-v1" - }, - { - "result": [ - { - "type": "intermediary", - "timeSeconds": 1.04053358, - "uploadBytes": 33554432, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011380722, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000013623, - "uploadBytes": 112263168, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000080188, - "uploadBytes": 110886912, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000015004, - "uploadBytes": 108658688, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00007817, - "uploadBytes": 112066560, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000003165, - "uploadBytes": 106627072, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000031669, - "uploadBytes": 109576192, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000041368, - "uploadBytes": 107413504, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00002769, - "uploadBytes": 108593152, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000512576, - "uploadBytes": 105381888, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00008197, - "uploadBytes": 114294784, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000090007, - "uploadBytes": 110100480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00008996, - "uploadBytes": 108724224, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.066193431, - "uploadBytes": 111476736, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004455174, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000030982, - "uploadBytes": 113049600, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000108627, - "uploadBytes": 110362624, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000078681, - "uploadBytes": 109903872, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.052704727, - "uploadBytes": 33554432, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009249883, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005650299, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011631354, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003244019, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012919082, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011481547, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006858897, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010840685, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006684976, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014349014, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009256552, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00554232, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.016382961, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006397421, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.017839124, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004954696, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006178642, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009929968, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013293042, - "uploadBytes": 8650752, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.04927883, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001477199, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006340286, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003064031, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002053801, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005857107, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005220288, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00144631, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009930769, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012886219, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001917424, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004743012, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00009384, - "uploadBytes": 111345664, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000084976, - "uploadBytes": 109182976, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008566553, - "uploadBytes": 106627072, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00806399, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000051728, - "uploadBytes": 112984064, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008482023, - "uploadBytes": 105119744, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.064270231, - "uploadBytes": 41943040, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007589613, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013376531, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008985032, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007189721, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008932125, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011638929, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.01426642, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.015354301, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011918518, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003451436, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011814766, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008828802, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014646962, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013711793, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009061729, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006974223, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006132748, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007870005, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.033977377, - "uploadBytes": 25165824, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.015268948, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.019507985, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.0027978, - "uploadBytes": 100663296, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.015564993, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.020992098, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014332604, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014310153, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.050468636, - "uploadBytes": 100663296, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013971663, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007399721, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.018164755, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.054004403, - "uploadBytes": 83886080, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.051327726, - "uploadBytes": 50331648, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.171692127, - "uploadBytes": 50331648, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.167956319, - "uploadBytes": 50331648, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.1643432599999999, - "uploadBytes": 50331648, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.162468686, - "uploadBytes": 50331648, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.069077389, - "uploadBytes": 16777216, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000038323, - "uploadBytes": 112590848, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000088688, - "uploadBytes": 112918528, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.0001491, - "uploadBytes": 101646336, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000303531, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000040356, - "uploadBytes": 113639424, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000083975, - "uploadBytes": 110231552, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000087822, - "uploadBytes": 107216896, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000046373, - "uploadBytes": 109248512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000008253, - "uploadBytes": 111804416, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000065395, - "uploadBytes": 108527616, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000085415, - "uploadBytes": 107806720, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000076694, - "uploadBytes": 108527616, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000770315, - "uploadBytes": 104464384, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006343776, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.061598019, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003370564, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000236695, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003711488, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.057832175, - "uploadBytes": 16777216, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.061435844, - "uploadBytes": 117440512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.065816627, - "uploadBytes": 117440512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.05593058, - "uploadBytes": 117440512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.057503664, - "uploadBytes": 117440512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.057976732, - "uploadBytes": 117440512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.061272003, - "uploadBytes": 117440512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.064524344, - "uploadBytes": 117440512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000034693, - "uploadBytes": 117047296, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.044639752, - "uploadBytes": 109445120, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.06169433, - "uploadBytes": 117440512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.065894083, - "uploadBytes": 117440512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000026765, - "uploadBytes": 117243904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.054892281, - "uploadBytes": 109248512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.059026385, - "uploadBytes": 117440512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.056803584, - "uploadBytes": 117440512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.06108593, - "uploadBytes": 117440512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.062079307, - "uploadBytes": 117440512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.025507127, - "uploadBytes": 25165824, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000045355, - "uploadBytes": 112328704, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000052019, - "uploadBytes": 108986368, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000490773, - "uploadBytes": 105840640, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005880467, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006983526, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005119624, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004007753, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000035069, - "uploadBytes": 111738880, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006087711, - "uploadBytes": 106364928, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003890386, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00578529, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004916227, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004536622, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010152478, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000104355, - "uploadBytes": 112852992, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000053491, - "uploadBytes": 108134400, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008516424, - "uploadBytes": 106168320, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006863508, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.061463419, - "uploadBytes": 16777216, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.057291143, - "uploadBytes": 117440512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000089193, - "uploadBytes": 112197632, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000014345, - "uploadBytes": 111411200, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000045594, - "uploadBytes": 110493696, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.057079552, - "uploadBytes": 110493696, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000036725, - "uploadBytes": 116523008, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.060256932, - "uploadBytes": 109969408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000077781, - "uploadBytes": 115539968, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.060576708, - "uploadBytes": 110952448, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000142391, - "uploadBytes": 117047296, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.057746143, - "uploadBytes": 109445120, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000058068, - "uploadBytes": 112590848, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.064113025, - "uploadBytes": 113901568, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000041518, - "uploadBytes": 112263168, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000060568, - "uploadBytes": 109969408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.066270454, - "uploadBytes": 113311744, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000109743, - "uploadBytes": 112984064, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.063429006, - "uploadBytes": 113508352, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00011099, - "uploadBytes": 39714816, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006256376, - "uploadBytes": 102891520, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001143476, - "uploadBytes": 100663296, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.022285963, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012557832, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.019465296, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010927518, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000022922, - "uploadBytes": 103153664, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.066631964, - "uploadBytes": 106561536, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003734807, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.048910611, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.046888742, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.048359419, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.047065821, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.04277117, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.0438138829999999, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.045425202, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.143055705, - "uploadBytes": 67108864, - "downloadBytes": 0 - } - ], - "implementation": "go-libp2p", - "version": "v0.28", - "transportStack": "tcp" - }, - { - "result": [ - { - "type": "intermediary", - "timeSeconds": 1.000306004, - "uploadBytes": 61145088, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000330199, - "uploadBytes": 124715008, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004047154, - "uploadBytes": 126025728, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007467546, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005994288, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007132477, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008475948, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006542227, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006852558, - "uploadBytes": 126550016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000121242, - "uploadBytes": 106299392, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000048021, - "uploadBytes": 91291648, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000023843, - "uploadBytes": 67960832, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000320472, - "uploadBytes": 52887552, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000596334, - "uploadBytes": 53084160, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001171293, - "uploadBytes": 40304640, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001379764, - "uploadBytes": 37683200, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000691298, - "uploadBytes": 37945344, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000741358, - "uploadBytes": 38207488, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001507003, - "uploadBytes": 21102592, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000154137, - "uploadBytes": 65077248, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000130798, - "uploadBytes": 124518400, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000201154, - "uploadBytes": 122290176, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006072069, - "uploadBytes": 123142144, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000131768, - "uploadBytes": 124780544, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002909629, - "uploadBytes": 122748928, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012270531, - "uploadBytes": 123928576, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000043315, - "uploadBytes": 125632512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004128551, - "uploadBytes": 121962496, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010474212, - "uploadBytes": 123797504, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000252542, - "uploadBytes": 125763584, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000135775, - "uploadBytes": 121176064, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.018838194, - "uploadBytes": 124583936, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000148087, - "uploadBytes": 126222336, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000194847, - "uploadBytes": 120913920, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.019182041, - "uploadBytes": 124715008, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.027030849, - "uploadBytes": 126550016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000254252, - "uploadBytes": 126025728, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000215045, - "uploadBytes": 121569280, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000091924, - "uploadBytes": 66125824, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011400855, - "uploadBytes": 124190720, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000099505, - "uploadBytes": 125370368, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000057348, - "uploadBytes": 123600896, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00013731, - "uploadBytes": 122748928, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000184802, - "uploadBytes": 107544576, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000179619, - "uploadBytes": 109707264, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000412363, - "uploadBytes": 108331008, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000423169, - "uploadBytes": 108199936, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000194561, - "uploadBytes": 110034944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000550553, - "uploadBytes": 108724224, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000425499, - "uploadBytes": 108396544, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002332032, - "uploadBytes": 110100480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000189025, - "uploadBytes": 109641728, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000047043, - "uploadBytes": 109248512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00051836, - "uploadBytes": 110166016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000884301, - "uploadBytes": 110428160, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000120189, - "uploadBytes": 109707264, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000305269, - "uploadBytes": 110755840, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000175758, - "uploadBytes": 65142784, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000041385, - "uploadBytes": 123928576, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00088818, - "uploadBytes": 122683392, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006920501, - "uploadBytes": 123666432, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000200421, - "uploadBytes": 124256256, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000630937, - "uploadBytes": 123142144, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009411013, - "uploadBytes": 123666432, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000193685, - "uploadBytes": 124387328, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001104057, - "uploadBytes": 123142144, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010023335, - "uploadBytes": 123731968, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000153967, - "uploadBytes": 124583936, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001229767, - "uploadBytes": 123011072, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009227981, - "uploadBytes": 123731968, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00018253, - "uploadBytes": 124452864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00015159, - "uploadBytes": 123273216, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013198484, - "uploadBytes": 123863040, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.0000601, - "uploadBytes": 124977152, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000144773, - "uploadBytes": 122748928, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.015987736, - "uploadBytes": 124059648, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000133132, - "uploadBytes": 67305472, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000237444, - "uploadBytes": 124846080, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002793328, - "uploadBytes": 124452864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011967168, - "uploadBytes": 126418944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011324605, - "uploadBytes": 126418944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010712902, - "uploadBytes": 126418944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011901016, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010402852, - "uploadBytes": 126418944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010695242, - "uploadBytes": 126353408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011026946, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011435924, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012354276, - "uploadBytes": 126550016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013169272, - "uploadBytes": 126681088, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000366551, - "uploadBytes": 109445120, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000251057, - "uploadBytes": 108855296, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008401526, - "uploadBytes": 110493696, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001479017, - "uploadBytes": 110624768, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00026647, - "uploadBytes": 109707264, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000013402, - "uploadBytes": 109707264, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014087253, - "uploadBytes": 63832064, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002879133, - "uploadBytes": 123600896, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009007974, - "uploadBytes": 76546048, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000661669, - "uploadBytes": 76087296, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00003524, - "uploadBytes": 74973184, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000196046, - "uploadBytes": 76349440, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000389872, - "uploadBytes": 75759616, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000377094, - "uploadBytes": 76742656, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000262639, - "uploadBytes": 76283904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00001386, - "uploadBytes": 77135872, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000063707, - "uploadBytes": 76742656, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000573863, - "uploadBytes": 77725696, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000165685, - "uploadBytes": 77135872, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003361752, - "uploadBytes": 77922304, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000105044, - "uploadBytes": 77725696, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000594233, - "uploadBytes": 77922304, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000885226, - "uploadBytes": 78446592, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000376174, - "uploadBytes": 78315520, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.0003391, - "uploadBytes": 78970880, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000174824, - "uploadBytes": 66191360, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010884753, - "uploadBytes": 124059648, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000098747, - "uploadBytes": 124715008, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001631869, - "uploadBytes": 122814464, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001584396, - "uploadBytes": 123797504, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000215263, - "uploadBytes": 124977152, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003270999, - "uploadBytes": 122748928, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002030538, - "uploadBytes": 123928576, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000208357, - "uploadBytes": 124977152, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003761656, - "uploadBytes": 122814464, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001636437, - "uploadBytes": 123797504, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000053235, - "uploadBytes": 125239296, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002173684, - "uploadBytes": 122486784, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002429749, - "uploadBytes": 123928576, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000059212, - "uploadBytes": 124715008, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000141461, - "uploadBytes": 124649472, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.015812117, - "uploadBytes": 124780544, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000009565, - "uploadBytes": 125566976, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004698943, - "uploadBytes": 122355712, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000321223, - "uploadBytes": 67436544, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000066032, - "uploadBytes": 113180672, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000147483, - "uploadBytes": 124059648, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000223052, - "uploadBytes": 124059648, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011581587, - "uploadBytes": 126353408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012346612, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011729701, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011395994, - "uploadBytes": 126353408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013536728, - "uploadBytes": 126681088, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.01223426, - "uploadBytes": 126615552, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011621589, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.01211306, - "uploadBytes": 126550016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012356838, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012741945, - "uploadBytes": 126550016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013836729, - "uploadBytes": 126550016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012545999, - "uploadBytes": 126615552, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013311663, - "uploadBytes": 126615552, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011660841, - "uploadBytes": 126550016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011450067, - "uploadBytes": 126418944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005795587, - "uploadBytes": 69140480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000017917, - "uploadBytes": 126877696, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000070911, - "uploadBytes": 126943232, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000822963, - "uploadBytes": 112459776, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00065651, - "uploadBytes": 77791232, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000367977, - "uploadBytes": 78184448, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00016093, - "uploadBytes": 78381056, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00051647, - "uploadBytes": 78577664, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001083437, - "uploadBytes": 78839808, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000675569, - "uploadBytes": 78774272, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001241816, - "uploadBytes": 79167488, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00039233, - "uploadBytes": 79560704, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000126336, - "uploadBytes": 79495168, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00103092, - "uploadBytes": 79822848, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001396531, - "uploadBytes": 80084992, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000627436, - "uploadBytes": 80216064, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001487065, - "uploadBytes": 80543744, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000599172, - "uploadBytes": 80871424, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000536868, - "uploadBytes": 81068032, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000158417, - "uploadBytes": 67829760, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003278174, - "uploadBytes": 124911616, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000032686, - "uploadBytes": 125108224, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004618053, - "uploadBytes": 124911616, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009851624, - "uploadBytes": 126353408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009604589, - "uploadBytes": 126353408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010012536, - "uploadBytes": 126353408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009926695, - "uploadBytes": 126418944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009092049, - "uploadBytes": 126222336, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011226742, - "uploadBytes": 126418944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009440034, - "uploadBytes": 126353408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011203992, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.01103568, - "uploadBytes": 126287872, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010996066, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010292345, - "uploadBytes": 126418944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010013054, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010773228, - "uploadBytes": 126418944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010594133, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009272338, - "uploadBytes": 126287872, - "downloadBytes": 0 - } - ], - "implementation": "go-libp2p", - "version": "v0.28", - "transportStack": "quic-v1" - }, - { - "result": [ - { - "type": "intermediary", - "timeSeconds": 1.097208333, - "uploadBytes": 8650752, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.023034472, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.018578435, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.016933747, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.02228395, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.022691391, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.019236662, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.022181471, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.020387353, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.023216945, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.02313195, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.015288257, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.025747805, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.017571315, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.016354232, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.027488929, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.023793358, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.017445714, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.017788026, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.03499143, - "uploadBytes": 25165824, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011596103, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009101714, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013141383, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011675614, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008755288, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002265475, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013575676, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011506032, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014739705, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009363083, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.0092108, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.01213567, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008950853, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007511077, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007654486, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013766246, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011997149, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012462951, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00002502, - "uploadBytes": 41418752, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000082389, - "uploadBytes": 107872256, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002110922, - "uploadBytes": 102367232, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014139409, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009887191, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.01063147, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.016361563, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007021277, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.021577687, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012598835, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002636393, - "uploadBytes": 100663296, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013776361, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006865801, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011224252, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.016685408, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010766963, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.01373917, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.016093473, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.018183329, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.023771814, - "uploadBytes": 33554432, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000114936, - "uploadBytes": 113377280, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.061580085, - "uploadBytes": 113115136, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.064037753, - "uploadBytes": 117440512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000060513, - "uploadBytes": 114425856, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000106605, - "uploadBytes": 110297088, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.062183675, - "uploadBytes": 110821376, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000024019, - "uploadBytes": 114032640, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00009985, - "uploadBytes": 111738880, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000031188, - "uploadBytes": 108199936, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.054576241, - "uploadBytes": 102236160, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000043709, - "uploadBytes": 114622464, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.064253863, - "uploadBytes": 111869952, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00784796, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000092447, - "uploadBytes": 112394240, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000037846, - "uploadBytes": 111738880, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.06618536, - "uploadBytes": 111411200, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002414815, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000014174, - "uploadBytes": 112263168, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001977305, - "uploadBytes": 16777216, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000064275, - "uploadBytes": 116785152, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.035465405, - "uploadBytes": 92930048, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000071063, - "uploadBytes": 116588544, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.059969257, - "uploadBytes": 109903872, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000055974, - "uploadBytes": 112525312, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000080968, - "uploadBytes": 109314048, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000069857, - "uploadBytes": 108593152, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.058987975, - "uploadBytes": 105775104, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.066883394, - "uploadBytes": 117440512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000092132, - "uploadBytes": 113770496, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.059830357, - "uploadBytes": 112721920, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00008014, - "uploadBytes": 112263168, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000056911, - "uploadBytes": 113180672, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000025381, - "uploadBytes": 105906176, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000034975, - "uploadBytes": 109445120, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.064023772, - "uploadBytes": 112852992, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000101404, - "uploadBytes": 112918528, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00002917, - "uploadBytes": 110690304, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.057514223, - "uploadBytes": 16777216, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.062322162, - "uploadBytes": 117440512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000050584, - "uploadBytes": 115015680, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.051018545, - "uploadBytes": 111476736, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000024445, - "uploadBytes": 115277824, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.062871064, - "uploadBytes": 111214592, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.057250578, - "uploadBytes": 117440512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000042457, - "uploadBytes": 116785152, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.059593964, - "uploadBytes": 109707264, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00011787, - "uploadBytes": 116326400, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.058814815, - "uploadBytes": 110166016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.065985988, - "uploadBytes": 117440512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.065172058, - "uploadBytes": 117440512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.066342997, - "uploadBytes": 117440512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.059744086, - "uploadBytes": 117440512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000015536, - "uploadBytes": 116850688, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.063436972, - "uploadBytes": 109641728, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000031896, - "uploadBytes": 116588544, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.055787451, - "uploadBytes": 33554432, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.01229669, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001985922, - "uploadBytes": 100663296, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009734951, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012413114, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005221805, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014454239, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.0142893, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007724763, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007011529, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014688337, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011568743, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.0127131, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008666641, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011636988, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007710748, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007549112, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010793167, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012229705, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.026359166, - "uploadBytes": 25165824, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001902902, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000028085, - "uploadBytes": 111476736, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006445494, - "uploadBytes": 106627072, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000108411, - "uploadBytes": 112852992, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000007631, - "uploadBytes": 108003328, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000050794, - "uploadBytes": 108920832, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000096134, - "uploadBytes": 111935488, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000040382, - "uploadBytes": 106233856, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001094175, - "uploadBytes": 106364928, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008162277, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008555729, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004713776, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004754974, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000391483, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001293223, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008126267, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003424245, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005746835, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014772069, - "uploadBytes": 16777216, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00921267, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006706942, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014827769, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.016478637, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008466872, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004389888, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007331507, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011872666, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011049489, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00630241, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004123767, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010104731, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004867662, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007908993, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007230082, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003121144, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009752891, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006282965, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000042893, - "uploadBytes": 39059456, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001017632, - "uploadBytes": 103546880, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010947151, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.01411221, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.017986568, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009900271, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009266305, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004755743, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008380481, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012548858, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007754319, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008119054, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010513126, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011142561, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001795544, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011642459, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009496283, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003470801, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004939507, - "uploadBytes": 109051904, - "downloadBytes": 0 - } - ], - "implementation": "go-libp2p", - "version": "v0.29", - "transportStack": "tcp" - }, - { - "result": [ - { - "type": "intermediary", - "timeSeconds": 1.000170042, - "uploadBytes": 69271552, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005022961, - "uploadBytes": 96010240, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000143961, - "uploadBytes": 104792064, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000042802, - "uploadBytes": 95748096, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000007972, - "uploadBytes": 78184448, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000636928, - "uploadBytes": 53936128, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001010537, - "uploadBytes": 55312384, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008249821, - "uploadBytes": 55377920, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000451016, - "uploadBytes": 56033280, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001023405, - "uploadBytes": 56229888, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000309138, - "uploadBytes": 56426496, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001853606, - "uploadBytes": 56819712, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00073749, - "uploadBytes": 57212928, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000402907, - "uploadBytes": 57212928, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000617648, - "uploadBytes": 57540608, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00284265, - "uploadBytes": 57606144, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000098239, - "uploadBytes": 57868288, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001016589, - "uploadBytes": 48562176, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000372404, - "uploadBytes": 41156608, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000153819, - "uploadBytes": 66584576, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000142804, - "uploadBytes": 124256256, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011028966, - "uploadBytes": 125632512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.01443828, - "uploadBytes": 126418944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014614248, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.017739071, - "uploadBytes": 126615552, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013903756, - "uploadBytes": 126418944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013335959, - "uploadBytes": 126353408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.01244597, - "uploadBytes": 128122880, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000143389, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000070627, - "uploadBytes": 123404288, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000195417, - "uploadBytes": 123404288, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010824526, - "uploadBytes": 125435904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014637846, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.015452554, - "uploadBytes": 126681088, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014382184, - "uploadBytes": 126418944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.015411096, - "uploadBytes": 126353408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013742278, - "uploadBytes": 126418944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014898363, - "uploadBytes": 126550016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003057344, - "uploadBytes": 66322432, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002865975, - "uploadBytes": 123994112, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000963421, - "uploadBytes": 123797504, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000205156, - "uploadBytes": 125042688, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000081616, - "uploadBytes": 123011072, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00022496, - "uploadBytes": 125173760, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011557557, - "uploadBytes": 124649472, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00017791, - "uploadBytes": 125763584, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002026767, - "uploadBytes": 122224640, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000117065, - "uploadBytes": 124256256, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.018428546, - "uploadBytes": 126222336, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.020012697, - "uploadBytes": 126418944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.01969839, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.020660276, - "uploadBytes": 126615552, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.021238026, - "uploadBytes": 126615552, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.019603552, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.02106912, - "uploadBytes": 126681088, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.018148784, - "uploadBytes": 126222336, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.021209847, - "uploadBytes": 126550016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001506603, - "uploadBytes": 63700992, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002077826, - "uploadBytes": 123731968, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000922695, - "uploadBytes": 121110528, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000180808, - "uploadBytes": 96665600, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002076103, - "uploadBytes": 107544576, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000049958, - "uploadBytes": 107872256, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001327045, - "uploadBytes": 107282432, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001576083, - "uploadBytes": 108396544, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000260529, - "uploadBytes": 107610112, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000113447, - "uploadBytes": 109314048, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000078489, - "uploadBytes": 107413504, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000025239, - "uploadBytes": 109445120, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000203647, - "uploadBytes": 108003328, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000104809, - "uploadBytes": 109445120, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000043363, - "uploadBytes": 108658688, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000204575, - "uploadBytes": 109641728, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000336952, - "uploadBytes": 108920832, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000058308, - "uploadBytes": 109969408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000603286, - "uploadBytes": 109772800, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000084368, - "uploadBytes": 66846720, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000167419, - "uploadBytes": 124518400, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011692595, - "uploadBytes": 122683392, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014630379, - "uploadBytes": 126418944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.015984642, - "uploadBytes": 126353408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.016622145, - "uploadBytes": 126550016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000124888, - "uploadBytes": 88735744, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000234059, - "uploadBytes": 123600896, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013595576, - "uploadBytes": 125894656, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.018612661, - "uploadBytes": 126746624, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.015093996, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.015852753, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.015601557, - "uploadBytes": 126418944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.015780279, - "uploadBytes": 126615552, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.015923125, - "uploadBytes": 126550016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.016207646, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.015325204, - "uploadBytes": 126418944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.016495672, - "uploadBytes": 126550016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.016401743, - "uploadBytes": 126550016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000055556, - "uploadBytes": 65273856, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00022274, - "uploadBytes": 107347968, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000180436, - "uploadBytes": 122224640, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013886178, - "uploadBytes": 123994112, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00022907, - "uploadBytes": 126156800, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000077896, - "uploadBytes": 122093568, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000753779, - "uploadBytes": 89915392, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000492714, - "uploadBytes": 106889216, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003196407, - "uploadBytes": 107085824, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000369366, - "uploadBytes": 108920832, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000537099, - "uploadBytes": 107020288, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001208481, - "uploadBytes": 107479040, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000691171, - "uploadBytes": 108593152, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000125097, - "uploadBytes": 107937792, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000376634, - "uploadBytes": 108396544, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00023618, - "uploadBytes": 108986368, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000130351, - "uploadBytes": 108527616, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000995071, - "uploadBytes": 109314048, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000544454, - "uploadBytes": 109379584, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000028544, - "uploadBytes": 65994752, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012030071, - "uploadBytes": 124321792, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000228006, - "uploadBytes": 126025728, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002900022, - "uploadBytes": 124387328, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004176585, - "uploadBytes": 123731968, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001493072, - "uploadBytes": 126287872, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001432138, - "uploadBytes": 123797504, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005545211, - "uploadBytes": 123928576, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000080284, - "uploadBytes": 125829120, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000206917, - "uploadBytes": 123600896, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000339921, - "uploadBytes": 122552320, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.016664488, - "uploadBytes": 125763584, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.020189629, - "uploadBytes": 126418944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.020299259, - "uploadBytes": 126353408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.019772194, - "uploadBytes": 126353408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.022152778, - "uploadBytes": 126550016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.020974421, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.019346763, - "uploadBytes": 126287872, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.020991262, - "uploadBytes": 126418944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000269353, - "uploadBytes": 67698688, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006120008, - "uploadBytes": 125173760, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000079108, - "uploadBytes": 125632512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00004403, - "uploadBytes": 124256256, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002098718, - "uploadBytes": 124190720, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012235738, - "uploadBytes": 126615552, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.019727857, - "uploadBytes": 105054208, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.018408371, - "uploadBytes": 127598592, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.018175886, - "uploadBytes": 105512960, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008418979, - "uploadBytes": 110428160, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007538893, - "uploadBytes": 110493696, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002929548, - "uploadBytes": 110624768, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000313624, - "uploadBytes": 110166016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000296132, - "uploadBytes": 109969408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008908424, - "uploadBytes": 69009408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007294727, - "uploadBytes": 54722560, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006607943, - "uploadBytes": 54984704, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007954059, - "uploadBytes": 55246848, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004492621, - "uploadBytes": 55443456, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000171621, - "uploadBytes": 68747264, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000194834, - "uploadBytes": 125501440, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000151261, - "uploadBytes": 125370368, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000206936, - "uploadBytes": 125501440, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00003536, - "uploadBytes": 124977152, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005943696, - "uploadBytes": 126287872, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00654025, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00482927, - "uploadBytes": 126353408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006526669, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007193202, - "uploadBytes": 126550016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007238216, - "uploadBytes": 126550016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008708979, - "uploadBytes": 126746624, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006676001, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007675664, - "uploadBytes": 126615552, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005346479, - "uploadBytes": 126418944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00634807, - "uploadBytes": 126418944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005435379, - "uploadBytes": 126418944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00995656, - "uploadBytes": 94175232, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002110554, - "uploadBytes": 110362624, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000878578, - "uploadBytes": 66519040, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000235847, - "uploadBytes": 124190720, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014066342, - "uploadBytes": 126156800, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014217678, - "uploadBytes": 126287872, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000081884, - "uploadBytes": 126418944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004809344, - "uploadBytes": 123994112, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000157643, - "uploadBytes": 125304832, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000175151, - "uploadBytes": 123207680, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010605976, - "uploadBytes": 125370368, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.015750737, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.017120198, - "uploadBytes": 126550016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.016460428, - "uploadBytes": 126550016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.01645971, - "uploadBytes": 126484480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.017112246, - "uploadBytes": 126615552, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000195333, - "uploadBytes": 112525312, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006677459, - "uploadBytes": 109707264, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00011637, - "uploadBytes": 110034944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000537707, - "uploadBytes": 108986368, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000287224, - "uploadBytes": 109641728, - "downloadBytes": 0 - } - ], - "implementation": "go-libp2p", - "version": "v0.29", - "transportStack": "quic-v1" - }, - { - "result": [ - { - "type": "intermediary", - "timeSeconds": 1.01354346, - "uploadBytes": 41943040, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012734824, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.01899061, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.017037125, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001304573, - "uploadBytes": 100663296, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.020483756, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.016695865, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002680665, - "uploadBytes": 100663296, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.017655235, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.015493213, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.020673317, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.018108627, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.018492181, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.016781757, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.020918522, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.020560558, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.027951489, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012636508, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.018773733, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004441701, - "uploadBytes": 33554432, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.024197025, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.028332548, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.022168227, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.021875479, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.036342833, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.019261079, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.019879179, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.026388595, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.02872415, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.022484897, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.018443524, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.02337114, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.022349524, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014499576, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.023823705, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.022204158, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.020206705, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.023164283, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.038360891, - "uploadBytes": 33554432, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004502313, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000039896, - "uploadBytes": 113770496, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000017764, - "uploadBytes": 108134400, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.066526787, - "uploadBytes": 113639424, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000098363, - "uploadBytes": 115277824, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000092279, - "uploadBytes": 109117440, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000025301, - "uploadBytes": 107479040, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000045158, - "uploadBytes": 112459776, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.061881219, - "uploadBytes": 109314048, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000026875, - "uploadBytes": 111607808, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000065988, - "uploadBytes": 108920832, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.065160635, - "uploadBytes": 115015680, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000037234, - "uploadBytes": 112918528, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.065664604, - "uploadBytes": 113573888, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000064578, - "uploadBytes": 114622464, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000089157, - "uploadBytes": 107151360, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00094748, - "uploadBytes": 105381888, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000060958, - "uploadBytes": 111804416, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.030691565, - "uploadBytes": 16777216, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.017327434, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.025092938, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.029703192, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.023105769, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.029127671, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.026386925, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.0290119, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.019484567, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.02794075, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013803485, - "uploadBytes": 100663296, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011791906, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.03055755, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.023149064, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.021544163, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.02019515, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.025298057, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.022425625, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.018335971, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.045593249, - "uploadBytes": 33554432, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.016723623, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.015451068, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.018178917, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014553231, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005435182, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012584238, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013819086, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.01736627, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012057051, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007303057, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.017588023, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.017529456, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011868954, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009197034, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014486459, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.01016341, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010165616, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007305586, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.039366594, - "uploadBytes": 25165824, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.018135225, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.016040375, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.022289638, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.018655245, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.019551466, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.01625678, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.021485947, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012420624, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.016261588, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.0187278, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.016902173, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.019473031, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.019248954, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.023174234, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.018324633, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.019658634, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006817641, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.016033215, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.020074637, - "uploadBytes": 8388608, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.066899885, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013163428, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.020722763, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.016149912, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.015438494, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.015019289, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.019977084, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.015074182, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013060412, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013970113, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.01490098, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013731654, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.021615882, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012023231, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.019459467, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014729563, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010051019, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.014672745, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.052194791, - "uploadBytes": 41943040, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002647037, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000072731, - "uploadBytes": 112590848, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005766713, - "uploadBytes": 105512960, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00007374, - "uploadBytes": 113704960, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.053972639, - "uploadBytes": 104398848, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000094416, - "uploadBytes": 114294784, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000023377, - "uploadBytes": 106102784, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001163457, - "uploadBytes": 106758144, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000068713, - "uploadBytes": 112394240, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00010118, - "uploadBytes": 112656384, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.066747098, - "uploadBytes": 110493696, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006438454, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000088712, - "uploadBytes": 111607808, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001687709, - "uploadBytes": 106496000, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000070738, - "uploadBytes": 112263168, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002110828, - "uploadBytes": 105840640, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000667264, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000017383, - "uploadBytes": 114556928, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.023427382, - "uploadBytes": 25165824, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002110259, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005816583, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009829093, - "uploadBytes": 92274688, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00794909, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.100879661, - "uploadBytes": 83886080, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.036843187, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.032979403, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.03077315, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.029185619, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.030103627, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.028113722, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.066571305, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.050100176, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.051947948, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.050069393, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.048452684, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.042104964, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.042041011, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012011134, - "uploadBytes": 16777216, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000087199, - "uploadBytes": 112066560, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.012003966, - "uploadBytes": 106037248, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005869394, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000065615, - "uploadBytes": 98172928, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005902083, - "uploadBytes": 103153664, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001009752, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008948598, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008338037, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.01303403, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.010507383, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00898419, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009185885, - "uploadBytes": 109051904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.099747946, - "uploadBytes": 83886080, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.036652785, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.032778921, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.031939854, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.046657402, - "uploadBytes": 67108864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.057129244, - "uploadBytes": 67108864, - "downloadBytes": 0 - } - ], - "implementation": "go-libp2p", - "version": "v0.31", - "transportStack": "tcp" - }, - { - "result": [ - { - "type": "intermediary", - "timeSeconds": 1.000004428, - "uploadBytes": 57671680, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00046953, - "uploadBytes": 104988672, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000488431, - "uploadBytes": 105119744, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000479969, - "uploadBytes": 107020288, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000027615, - "uploadBytes": 105578496, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.0000117, - "uploadBytes": 105971712, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000335792, - "uploadBytes": 107020288, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000663028, - "uploadBytes": 106692608, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00002618, - "uploadBytes": 107020288, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000419539, - "uploadBytes": 107282432, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000224892, - "uploadBytes": 107151360, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000582794, - "uploadBytes": 107937792, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000428395, - "uploadBytes": 107479040, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000070755, - "uploadBytes": 107937792, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000599238, - "uploadBytes": 108462080, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00006132, - "uploadBytes": 108199936, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000611338, - "uploadBytes": 108920832, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000668798, - "uploadBytes": 108724224, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000131151, - "uploadBytes": 109641728, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005932069, - "uploadBytes": 50331648, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00067579, - "uploadBytes": 107413504, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000483605, - "uploadBytes": 105644032, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000552127, - "uploadBytes": 105971712, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000481805, - "uploadBytes": 106889216, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00016097, - "uploadBytes": 107413504, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000115149, - "uploadBytes": 106627072, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000171771, - "uploadBytes": 107282432, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000028117, - "uploadBytes": 108265472, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000015236, - "uploadBytes": 107479040, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000265549, - "uploadBytes": 107806720, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000454158, - "uploadBytes": 108789760, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000231227, - "uploadBytes": 108134400, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.053293732, - "uploadBytes": 106037248, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001210804, - "uploadBytes": 57147392, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.0000109, - "uploadBytes": 48889856, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001007619, - "uploadBytes": 37683200, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000626252, - "uploadBytes": 38076416, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000971718, - "uploadBytes": 38797312, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000520369, - "uploadBytes": 48431104, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000926077, - "uploadBytes": 105250816, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000005127, - "uploadBytes": 106627072, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000244566, - "uploadBytes": 105316352, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000529728, - "uploadBytes": 106299392, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000421614, - "uploadBytes": 106627072, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000804767, - "uploadBytes": 106364928, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001192895, - "uploadBytes": 107282432, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000377249, - "uploadBytes": 107085824, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000321199, - "uploadBytes": 95354880, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000470432, - "uploadBytes": 76021760, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000172668, - "uploadBytes": 75104256, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000916292, - "uploadBytes": 75169792, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004792952, - "uploadBytes": 76480512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001153069, - "uploadBytes": 76218368, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000555937, - "uploadBytes": 76152832, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001249888, - "uploadBytes": 76808192, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000358703, - "uploadBytes": 77135872, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000024894, - "uploadBytes": 76808192, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.013019523, - "uploadBytes": 52428800, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000262696, - "uploadBytes": 107347968, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000009083, - "uploadBytes": 105644032, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000568356, - "uploadBytes": 105709568, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002827531, - "uploadBytes": 107085824, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000606617, - "uploadBytes": 107413504, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000349867, - "uploadBytes": 106627072, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000755582, - "uploadBytes": 107151360, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001427808, - "uploadBytes": 108331008, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000161287, - "uploadBytes": 107413504, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000401627, - "uploadBytes": 107675648, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000480414, - "uploadBytes": 108134400, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000002451, - "uploadBytes": 108265472, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000668723, - "uploadBytes": 108527616, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000239876, - "uploadBytes": 108724224, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000299818, - "uploadBytes": 109117440, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000433006, - "uploadBytes": 108789760, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000723863, - "uploadBytes": 109707264, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000520853, - "uploadBytes": 82706432, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004248049, - "uploadBytes": 56557568, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000117589, - "uploadBytes": 108265472, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000441767, - "uploadBytes": 108527616, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000351379, - "uploadBytes": 108855296, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000903761, - "uploadBytes": 109117440, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001134453, - "uploadBytes": 109314048, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000395362, - "uploadBytes": 109445120, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001198467, - "uploadBytes": 109576192, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000233848, - "uploadBytes": 109838336, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000439237, - "uploadBytes": 110362624, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00000401, - "uploadBytes": 110034944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000305326, - "uploadBytes": 110166016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000136391, - "uploadBytes": 110493696, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00026981, - "uploadBytes": 110952448, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000517912, - "uploadBytes": 110886912, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000041151, - "uploadBytes": 111214592, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000542181, - "uploadBytes": 111673344, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000151717, - "uploadBytes": 111935488, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000096745, - "uploadBytes": 112197632, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000771197, - "uploadBytes": 59506688, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000790642, - "uploadBytes": 72220672, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00069287, - "uploadBytes": 74121216, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000303427, - "uploadBytes": 73007104, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00026472, - "uploadBytes": 74514432, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000105348, - "uploadBytes": 73662464, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000039994, - "uploadBytes": 74776576, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000064258, - "uploadBytes": 74317824, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001280035, - "uploadBytes": 75038720, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000307912, - "uploadBytes": 74907648, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000559012, - "uploadBytes": 75694080, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000275843, - "uploadBytes": 75366400, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001217472, - "uploadBytes": 76021760, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000229441, - "uploadBytes": 76021760, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001975285, - "uploadBytes": 76283904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000741793, - "uploadBytes": 76414976, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001828188, - "uploadBytes": 76611584, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000850056, - "uploadBytes": 77266944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00115565, - "uploadBytes": 76939264, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001871548, - "uploadBytes": 56557568, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007911746, - "uploadBytes": 107806720, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006348008, - "uploadBytes": 108068864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00054746, - "uploadBytes": 108134400, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001094064, - "uploadBytes": 107085824, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00068417, - "uploadBytes": 107413504, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.0001065, - "uploadBytes": 107872256, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000017775, - "uploadBytes": 108134400, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000468803, - "uploadBytes": 108986368, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000245129, - "uploadBytes": 80347136, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000360757, - "uploadBytes": 76283904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000010849, - "uploadBytes": 76152832, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000042325, - "uploadBytes": 76349440, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000621559, - "uploadBytes": 76873728, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000314124, - "uploadBytes": 77070336, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001311889, - "uploadBytes": 77725696, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000059234, - "uploadBytes": 77725696, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000549921, - "uploadBytes": 77660160, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000765366, - "uploadBytes": 78053376, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000032687, - "uploadBytes": 51249152, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000311429, - "uploadBytes": 104923136, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000249674, - "uploadBytes": 105316352, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000020374, - "uploadBytes": 105250816, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001096064, - "uploadBytes": 105512960, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000873568, - "uploadBytes": 106496000, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001252477, - "uploadBytes": 106823680, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000372179, - "uploadBytes": 106102784, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000549131, - "uploadBytes": 106692608, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000320368, - "uploadBytes": 106954752, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000286576, - "uploadBytes": 107085824, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001193675, - "uploadBytes": 107544576, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000278823, - "uploadBytes": 107806720, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001826103, - "uploadBytes": 107675648, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00119412, - "uploadBytes": 108265472, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00022847, - "uploadBytes": 108068864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000149856, - "uploadBytes": 108724224, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000222033, - "uploadBytes": 108658688, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000276711, - "uploadBytes": 109314048, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000358845, - "uploadBytes": 49807360, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000237545, - "uploadBytes": 103350272, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.0002791, - "uploadBytes": 104136704, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002424807, - "uploadBytes": 104529920, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003108443, - "uploadBytes": 104792064, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002686505, - "uploadBytes": 105054208, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000195662, - "uploadBytes": 105119744, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000042607, - "uploadBytes": 104923136, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000343429, - "uploadBytes": 105185280, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000130893, - "uploadBytes": 105316352, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000503924, - "uploadBytes": 105709568, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000804531, - "uploadBytes": 106102784, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000477121, - "uploadBytes": 105971712, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000385687, - "uploadBytes": 106299392, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000090677, - "uploadBytes": 106692608, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000520691, - "uploadBytes": 106758144, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000403111, - "uploadBytes": 107020288, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000191133, - "uploadBytes": 107085824, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000401746, - "uploadBytes": 107347968, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000373355, - "uploadBytes": 54525952, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00018882, - "uploadBytes": 102432768, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000315556, - "uploadBytes": 104464384, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000319614, - "uploadBytes": 102957056, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000003934, - "uploadBytes": 104660992, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000987516, - "uploadBytes": 104136704, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00001507, - "uploadBytes": 104398848, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000063935, - "uploadBytes": 105381888, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000413439, - "uploadBytes": 104529920, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.00022837, - "uploadBytes": 105775104, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001562478, - "uploadBytes": 105119744, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000959767, - "uploadBytes": 105775104, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000587298, - "uploadBytes": 105381888, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000640741, - "uploadBytes": 106102784, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000312043, - "uploadBytes": 106168320, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000221354, - "uploadBytes": 106430464, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001434093, - "uploadBytes": 107085824, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.000280855, - "uploadBytes": 106758144, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001045653, - "uploadBytes": 107282432, - "downloadBytes": 0 - } - ], - "implementation": "go-libp2p", - "version": "v0.31", - "transportStack": "quic-v1" - }, - { - "result": [ - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 72810496, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 215285760, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 238288896, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 230162432, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 237633536, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 222429184, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 238026752, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 237436928, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 239992832, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 236716032, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 240648192, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 238092288, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 238944256, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 237305856, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007, - "uploadBytes": 241238016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 240648192, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008, - "uploadBytes": 239403008, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.037, - "uploadBytes": 232783872, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 74448896, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006, - "uploadBytes": 232718336, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 225247232, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 239861760, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 238944256, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 240975872, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 241238016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 222298112, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 218824704, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 226623488, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 233635840, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 238092288, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 239534080, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 240648192, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 240123904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 236453888, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 231866368, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006, - "uploadBytes": 236519424, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 71172096, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006, - "uploadBytes": 237371392, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 238682112, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.032, - "uploadBytes": 234356736, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 236060672, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 237764608, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 236912640, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 236847104, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 237305856, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 238419968, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 239206400, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 230686720, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 239599616, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 238682112, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007, - "uploadBytes": 239403008, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006, - "uploadBytes": 238354432, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006, - "uploadBytes": 237830144, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 238354432, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 80740352, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009, - "uploadBytes": 229376000, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 227934208, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 231473152, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 233439232, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006, - "uploadBytes": 234291200, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 234356736, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 233242624, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007, - "uploadBytes": 234815488, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 234029056, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 234291200, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 234094592, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006, - "uploadBytes": 235012096, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 231342080, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 198049792, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.018, - "uploadBytes": 197853184, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 208076800, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 213188608, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.024, - "uploadBytes": 69926912, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 225312768, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 232849408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 232259584, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 232849408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 231145472, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 227147776, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 234291200, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 234487808, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 234946560, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 232390656, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009, - "uploadBytes": 235012096, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 234094592, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006, - "uploadBytes": 235732992, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 233242624, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 235208704, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 233766912, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 234356736, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 83886080, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 231211008, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 239534080, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 238551040, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 239271936, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 237371392, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 236650496, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 238354432, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006, - "uploadBytes": 230555648, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 240713728, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 238157824, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 240910336, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 240582656, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 239206400, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 236519424, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 237895680, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 236650496, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 237568000, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 69730304, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 234553344, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 242089984, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 241762304, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 240451584, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 242745344, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 240910336, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 238485504, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 230883328, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 240451584, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 239009792, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 241893376, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 241041408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 243597312, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 241893376, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 243335168, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008, - "uploadBytes": 235995136, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 240189440, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.025, - "uploadBytes": 21102592, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 203161600, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 235470848, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 239337472, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 238288896, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 238616576, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 237240320, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 237830144, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007, - "uploadBytes": 239730688, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 239468544, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 236191744, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 238026752, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 237764608, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 232521728, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 237305856, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 237633536, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 238616576, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 236388352, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 85852160, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 225247232, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 227409920, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 229769216, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 234684416, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 233439232, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 232390656, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 234553344, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 234553344, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 233373696, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 233766912, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 226230272, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 232914944, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 232980480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 232718336, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006, - "uploadBytes": 233111552, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 235208704, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 232849408, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 40697856, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 208011264, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.007, - "uploadBytes": 235077632, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 237043712, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 235929600, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 238157824, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 235732992, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 237436928, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 236191744, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 234422272, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 236584960, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 234422272, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 236519424, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 233242624, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 233701376, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 236126208, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 232587264, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.011, - "uploadBytes": 237240320, - "downloadBytes": 0 - } - ], - "implementation": "js-libp2p", - "version": "v0.46", - "transportStack": "tcp" - }, - { - "result": [ - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 24903680, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 212729856, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 254345216, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 251723776, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 247660544, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 235732992, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 243138560, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 255787008, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 245301248, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 257818624, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 256770048, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 258932736, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 257097728, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 255590400, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 256704512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 257949696, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 239468544, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 209518592, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 215941120, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.034, - "uploadBytes": 62193664, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 237830144, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 254869504, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 256049152, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 257228800, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 256245760, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 256835584, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 241238016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 255328256, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 255787008, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 252575744, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 257097728, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 239534080, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 255590400, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 256049152, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 256245760, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 255590400, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 255852544, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 256573440, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.008, - "uploadBytes": 74383360, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 244056064, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 255131648, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 256704512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 251658240, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 256901120, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 257622016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 253165568, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 255262720, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 252575744, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 246349824, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 257097728, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 252051456, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 256049152, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 250347520, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 254214144, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 244580352, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 238878720, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 248643584, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.018, - "uploadBytes": 61341696, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 231866368, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 256770048, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 255787008, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 254214144, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 252968960, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 254279680, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 256180224, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 255393792, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 246874112, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 251854848, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 255983616, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 251330560, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 247922688, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 244318208, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 242810880, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 255590400, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 256376832, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 252968960, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.023, - "uploadBytes": 64028672, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 234881024, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 252706816, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 254869504, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 254148608, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 254935040, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 254738432, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 253493248, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 255852544, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 255524864, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 255721472, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 247857152, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 243007488, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 251133952, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 241827840, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 255393792, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 253231104, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 253952000, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 250806272, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 69206016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 244645888, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 157089792, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 143851520, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 153812992, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 135266304, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 114819072, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 114688000, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 122617856, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 121044992, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 105054208, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 90374144, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 97189888, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 96403456, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 102301696, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 100663296, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 105578496, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 103153664, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 107479040, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 67829760, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 228524032, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 231866368, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 247201792, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 259063808, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 251658240, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 255328256, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 242810880, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 255721472, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 256114688, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 257359872, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 258211840, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 253427712, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 251068416, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 253100032, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 253231104, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 231342080, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 225640448, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 234946560, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 55836672, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 242941952, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 212008960, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 216006656, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 222953472, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 229507072, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 243007488, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 236716032, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 253034496, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 253296640, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 254541824, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 255655936, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 254148608, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 254935040, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 242745344, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 247857152, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 236257280, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.009, - "uploadBytes": 204406784, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 203948032, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 74252288, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 215744512, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 232521728, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 233701376, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 234946560, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 229441536, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 231866368, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 229441536, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 231669760, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 231800832, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 227409920, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 232325120, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 230490112, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 233242624, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 256311296, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 255852544, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 257622016, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 258473984, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 259063808, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.006, - "uploadBytes": 84475904, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.004, - "uploadBytes": 242745344, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 234815488, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 238616576, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 250347520, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 241172480, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 223674368, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 225443840, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 225181696, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 231407616, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 246808576, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 250675200, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 249102336, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 246480896, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 229244928, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 223019008, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 247726080, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 245956608, - "downloadBytes": 0 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 245039104, - "downloadBytes": 0 - } - ], - "implementation": "js-libp2p", - "version": "v1.0", - "transportStack": "tcp" - } - ], - "parameters": { - "uploadBytes": 9007199254740991, - "downloadBytes": 0 - } - }, - { - "name": "throughput/download", - "unit": "bit/s", - "results": [ - { - "result": [ - { - "type": "intermediary", - "timeSeconds": 1.000008344, - "uploadBytes": 0, - "downloadBytes": 85278720 - }, - { - "type": "intermediary", - "timeSeconds": 1.000480964, - "uploadBytes": 0, - "downloadBytes": 219819049 - }, - { - "type": "intermediary", - "timeSeconds": 1.000067397, - "uploadBytes": 0, - "downloadBytes": 218828953 - }, - { - "type": "intermediary", - "timeSeconds": 1.000154894, - "uploadBytes": 0, - "downloadBytes": 219841342 - }, - { - "type": "intermediary", - "timeSeconds": 1.000137675, - "uploadBytes": 0, - "downloadBytes": 219866794 - }, - { - "type": "intermediary", - "timeSeconds": 1.000190381, - "uploadBytes": 0, - "downloadBytes": 219671004 - }, - { - "type": "intermediary", - "timeSeconds": 1.000293077, - "uploadBytes": 0, - "downloadBytes": 218955776 - }, - { - "type": "intermediary", - "timeSeconds": 1.000112389, - "uploadBytes": 0, - "downloadBytes": 219705210 - }, - { - "type": "intermediary", - "timeSeconds": 1.000065937, - "uploadBytes": 0, - "downloadBytes": 218984850 - }, - { - "type": "intermediary", - "timeSeconds": 1.000087634, - "uploadBytes": 0, - "downloadBytes": 219568498 - }, - { - "type": "intermediary", - "timeSeconds": 1.000024891, - "uploadBytes": 0, - "downloadBytes": 218921598 - }, - { - "type": "intermediary", - "timeSeconds": 1.000224619, - "uploadBytes": 0, - "downloadBytes": 219500678 - }, - { - "type": "intermediary", - "timeSeconds": 1.000028296, - "uploadBytes": 0, - "downloadBytes": 218680068 - }, - { - "type": "intermediary", - "timeSeconds": 1.000048083, - "uploadBytes": 0, - "downloadBytes": 219609726 - }, - { - "type": "intermediary", - "timeSeconds": 1.000018327, - "uploadBytes": 0, - "downloadBytes": 218898700 - }, - { - "type": "intermediary", - "timeSeconds": 1.000067903, - "uploadBytes": 0, - "downloadBytes": 219663982 - }, - { - "type": "intermediary", - "timeSeconds": 1.000029467, - "uploadBytes": 0, - "downloadBytes": 219118206 - }, - { - "type": "intermediary", - "timeSeconds": 1.000032917, - "uploadBytes": 0, - "downloadBytes": 219167358 - }, - { - "type": "intermediary", - "timeSeconds": 1.00023442, - "uploadBytes": 0, - "downloadBytes": 219332608 - }, - { - "type": "intermediary", - "timeSeconds": 1.000057452, - "uploadBytes": 0, - "downloadBytes": 89339338 - }, - { - "type": "intermediary", - "timeSeconds": 1.000027649, - "uploadBytes": 0, - "downloadBytes": 160678258 - }, - { - "type": "intermediary", - "timeSeconds": 1.000110589, - "uploadBytes": 0, - "downloadBytes": 155699396 - }, - { - "type": "intermediary", - "timeSeconds": 1.000028317, - "uploadBytes": 0, - "downloadBytes": 156511280 - }, - { - "type": "intermediary", - "timeSeconds": 1.000135771, - "uploadBytes": 0, - "downloadBytes": 156210128 - }, - { - "type": "intermediary", - "timeSeconds": 1.000093398, - "uploadBytes": 0, - "downloadBytes": 155388684 - }, - { - "type": "intermediary", - "timeSeconds": 1.00004579, - "uploadBytes": 0, - "downloadBytes": 155741232 - }, - { - "type": "intermediary", - "timeSeconds": 1.000116404, - "uploadBytes": 0, - "downloadBytes": 156732998 - }, - { - "type": "intermediary", - "timeSeconds": 1.000081958, - "uploadBytes": 0, - "downloadBytes": 156748548 - }, - { - "type": "intermediary", - "timeSeconds": 1.000247055, - "uploadBytes": 0, - "downloadBytes": 155758458 - }, - { - "type": "intermediary", - "timeSeconds": 1.000064574, - "uploadBytes": 0, - "downloadBytes": 156261258 - }, - { - "type": "intermediary", - "timeSeconds": 1.000069842, - "uploadBytes": 0, - "downloadBytes": 156935286 - }, - { - "type": "intermediary", - "timeSeconds": 1.000022804, - "uploadBytes": 0, - "downloadBytes": 157752202 - }, - { - "type": "intermediary", - "timeSeconds": 1.000153949, - "uploadBytes": 0, - "downloadBytes": 157115510 - }, - { - "type": "intermediary", - "timeSeconds": 1.000110827, - "uploadBytes": 0, - "downloadBytes": 156648834 - }, - { - "type": "intermediary", - "timeSeconds": 1.00018227, - "uploadBytes": 0, - "downloadBytes": 157780740 - }, - { - "type": "intermediary", - "timeSeconds": 1.000056396, - "uploadBytes": 0, - "downloadBytes": 157984398 - }, - { - "type": "intermediary", - "timeSeconds": 1.000089591, - "uploadBytes": 0, - "downloadBytes": 157869174 - }, - { - "type": "intermediary", - "timeSeconds": 1.000035563, - "uploadBytes": 0, - "downloadBytes": 157787254 - }, - { - "type": "intermediary", - "timeSeconds": 1.000148599, - "uploadBytes": 0, - "downloadBytes": 87408640 - }, - { - "type": "intermediary", - "timeSeconds": 1.000021259, - "uploadBytes": 0, - "downloadBytes": 221146160 - }, - { - "type": "intermediary", - "timeSeconds": 1.000037398, - "uploadBytes": 0, - "downloadBytes": 220506600 - }, - { - "type": "intermediary", - "timeSeconds": 1.000029064, - "uploadBytes": 0, - "downloadBytes": 221035130 - }, - { - "type": "intermediary", - "timeSeconds": 1.00001947, - "uploadBytes": 0, - "downloadBytes": 221179758 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001836, - "uploadBytes": 0, - "downloadBytes": 103125126 - }, - { - "type": "intermediary", - "timeSeconds": 1.000139143, - "uploadBytes": 0, - "downloadBytes": 75832193 - }, - { - "type": "intermediary", - "timeSeconds": 1.000114675, - "uploadBytes": 0, - "downloadBytes": 77164419 - }, - { - "type": "intermediary", - "timeSeconds": 1.000031888, - "uploadBytes": 0, - "downloadBytes": 76234743 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001335, - "uploadBytes": 0, - "downloadBytes": 77001989 - }, - { - "type": "intermediary", - "timeSeconds": 1.000041853, - "uploadBytes": 0, - "downloadBytes": 77234176 - }, - { - "type": "intermediary", - "timeSeconds": 1.000009452, - "uploadBytes": 0, - "downloadBytes": 77156486 - }, - { - "type": "intermediary", - "timeSeconds": 1.000132292, - "uploadBytes": 0, - "downloadBytes": 77594624 - }, - { - "type": "intermediary", - "timeSeconds": 1.000222767, - "uploadBytes": 0, - "downloadBytes": 78039812 - }, - { - "type": "intermediary", - "timeSeconds": 1.000074341, - "uploadBytes": 0, - "downloadBytes": 78090374 - }, - { - "type": "intermediary", - "timeSeconds": 1.00010344, - "uploadBytes": 0, - "downloadBytes": 78345459 - }, - { - "type": "intermediary", - "timeSeconds": 1.000040171, - "uploadBytes": 0, - "downloadBytes": 78794359 - }, - { - "type": "intermediary", - "timeSeconds": 1.000407305, - "uploadBytes": 0, - "downloadBytes": 78938112 - }, - { - "type": "intermediary", - "timeSeconds": 1.000072411, - "uploadBytes": 0, - "downloadBytes": 79003648 - }, - { - "type": "intermediary", - "timeSeconds": 1.000036671, - "uploadBytes": 0, - "downloadBytes": 93503488 - }, - { - "type": "intermediary", - "timeSeconds": 1.000048835, - "uploadBytes": 0, - "downloadBytes": 225460224 - }, - { - "type": "intermediary", - "timeSeconds": 1.000059048, - "uploadBytes": 0, - "downloadBytes": 226263040 - }, - { - "type": "intermediary", - "timeSeconds": 1.000176409, - "uploadBytes": 0, - "downloadBytes": 226017280 - }, - { - "type": "intermediary", - "timeSeconds": 1.000295395, - "uploadBytes": 0, - "downloadBytes": 226074916 - }, - { - "type": "intermediary", - "timeSeconds": 1.000107438, - "uploadBytes": 0, - "downloadBytes": 225877724 - }, - { - "type": "intermediary", - "timeSeconds": 1.000107313, - "uploadBytes": 0, - "downloadBytes": 225913872 - }, - { - "type": "intermediary", - "timeSeconds": 1.000097713, - "uploadBytes": 0, - "downloadBytes": 226010230 - }, - { - "type": "intermediary", - "timeSeconds": 1.000164191, - "uploadBytes": 0, - "downloadBytes": 226042124 - }, - { - "type": "intermediary", - "timeSeconds": 1.000147909, - "uploadBytes": 0, - "downloadBytes": 226010230 - }, - { - "type": "intermediary", - "timeSeconds": 1.000012377, - "uploadBytes": 0, - "downloadBytes": 226109070 - }, - { - "type": "intermediary", - "timeSeconds": 1.000062778, - "uploadBytes": 0, - "downloadBytes": 225922670 - }, - { - "type": "intermediary", - "timeSeconds": 1.000041593, - "uploadBytes": 0, - "downloadBytes": 225917566 - }, - { - "type": "intermediary", - "timeSeconds": 1.000003535, - "uploadBytes": 0, - "downloadBytes": 225861900 - }, - { - "type": "intermediary", - "timeSeconds": 1.000069805, - "uploadBytes": 0, - "downloadBytes": 225889028 - }, - { - "type": "intermediary", - "timeSeconds": 1.00005321, - "uploadBytes": 0, - "downloadBytes": 224562798 - }, - { - "type": "intermediary", - "timeSeconds": 1.000242396, - "uploadBytes": 0, - "downloadBytes": 225500042 - }, - { - "type": "intermediary", - "timeSeconds": 1.000135676, - "uploadBytes": 0, - "downloadBytes": 225738752 - }, - { - "type": "intermediary", - "timeSeconds": 1.000074999, - "uploadBytes": 0, - "downloadBytes": 226010230 - }, - { - "type": "intermediary", - "timeSeconds": 1.000039922, - "uploadBytes": 0, - "downloadBytes": 87044201 - }, - { - "type": "intermediary", - "timeSeconds": 1.000259393, - "uploadBytes": 0, - "downloadBytes": 221122455 - }, - { - "type": "intermediary", - "timeSeconds": 1.000077788, - "uploadBytes": 0, - "downloadBytes": 219481478 - }, - { - "type": "intermediary", - "timeSeconds": 1.000065838, - "uploadBytes": 0, - "downloadBytes": 221270162 - }, - { - "type": "intermediary", - "timeSeconds": 1.00004291, - "uploadBytes": 0, - "downloadBytes": 220951796 - }, - { - "type": "intermediary", - "timeSeconds": 1.000074178, - "uploadBytes": 0, - "downloadBytes": 219455739 - }, - { - "type": "intermediary", - "timeSeconds": 1.000295919, - "uploadBytes": 0, - "downloadBytes": 221582329 - }, - { - "type": "intermediary", - "timeSeconds": 1.000067536, - "uploadBytes": 0, - "downloadBytes": 219420168 - }, - { - "type": "intermediary", - "timeSeconds": 1.000222888, - "uploadBytes": 0, - "downloadBytes": 221010826 - }, - { - "type": "intermediary", - "timeSeconds": 1.000167434, - "uploadBytes": 0, - "downloadBytes": 219733739 - }, - { - "type": "intermediary", - "timeSeconds": 1.000328484, - "uploadBytes": 0, - "downloadBytes": 220235147 - }, - { - "type": "intermediary", - "timeSeconds": 1.000168153, - "uploadBytes": 0, - "downloadBytes": 220131194 - }, - { - "type": "intermediary", - "timeSeconds": 1.000088656, - "uploadBytes": 0, - "downloadBytes": 220199550 - }, - { - "type": "intermediary", - "timeSeconds": 1.00000338, - "uploadBytes": 0, - "downloadBytes": 148989582 - }, - { - "type": "intermediary", - "timeSeconds": 1.000363124, - "uploadBytes": 0, - "downloadBytes": 75718388 - }, - { - "type": "intermediary", - "timeSeconds": 1.000124111, - "uploadBytes": 0, - "downloadBytes": 76719758 - }, - { - "type": "intermediary", - "timeSeconds": 1.000260392, - "uploadBytes": 0, - "downloadBytes": 76068092 - }, - { - "type": "intermediary", - "timeSeconds": 1.000183306, - "uploadBytes": 0, - "downloadBytes": 76315253 - }, - { - "type": "intermediary", - "timeSeconds": 1.000248369, - "uploadBytes": 0, - "downloadBytes": 77369487 - }, - { - "type": "intermediary", - "timeSeconds": 1.011699888, - "uploadBytes": 0, - "downloadBytes": 54384004 - }, - { - "type": "intermediary", - "timeSeconds": 1.003048601, - "uploadBytes": 0, - "downloadBytes": 57371260 - }, - { - "type": "intermediary", - "timeSeconds": 1.002713049, - "uploadBytes": 0, - "downloadBytes": 53259312 - }, - { - "type": "intermediary", - "timeSeconds": 1.002120858, - "uploadBytes": 0, - "downloadBytes": 53530770 - }, - { - "type": "intermediary", - "timeSeconds": 1.001778505, - "uploadBytes": 0, - "downloadBytes": 53789502 - }, - { - "type": "intermediary", - "timeSeconds": 1.002057606, - "uploadBytes": 0, - "downloadBytes": 54083584 - }, - { - "type": "intermediary", - "timeSeconds": 1.000041326, - "uploadBytes": 0, - "downloadBytes": 54209584 - }, - { - "type": "intermediary", - "timeSeconds": 1.000143937, - "uploadBytes": 0, - "downloadBytes": 54401366 - }, - { - "type": "intermediary", - "timeSeconds": 1.000237013, - "uploadBytes": 0, - "downloadBytes": 54733872 - }, - { - "type": "intermediary", - "timeSeconds": 1.000055445, - "uploadBytes": 0, - "downloadBytes": 54857290 - }, - { - "type": "intermediary", - "timeSeconds": 1.000193061, - "uploadBytes": 0, - "downloadBytes": 55377090 - }, - { - "type": "intermediary", - "timeSeconds": 1.000153631, - "uploadBytes": 0, - "downloadBytes": 55671418 - }, - { - "type": "intermediary", - "timeSeconds": 1.00016652, - "uploadBytes": 0, - "downloadBytes": 56005584 - }, - { - "type": "intermediary", - "timeSeconds": 1.000055432, - "uploadBytes": 0, - "downloadBytes": 56162938 - }, - { - "type": "intermediary", - "timeSeconds": 1.000070421, - "uploadBytes": 0, - "downloadBytes": 56452778 - }, - { - "type": "intermediary", - "timeSeconds": 1.000075709, - "uploadBytes": 0, - "downloadBytes": 56924502 - }, - { - "type": "intermediary", - "timeSeconds": 1.000046932, - "uploadBytes": 0, - "downloadBytes": 57168018 - }, - { - "type": "intermediary", - "timeSeconds": 1.000088721, - "uploadBytes": 0, - "downloadBytes": 57447960 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000053, - "uploadBytes": 0, - "downloadBytes": 57475063 - }, - { - "type": "intermediary", - "timeSeconds": 1.00003684, - "uploadBytes": 0, - "downloadBytes": 86425600 - }, - { - "type": "intermediary", - "timeSeconds": 1.000040037, - "uploadBytes": 0, - "downloadBytes": 220894744 - }, - { - "type": "intermediary", - "timeSeconds": 1.000255189, - "uploadBytes": 0, - "downloadBytes": 219304082 - }, - { - "type": "intermediary", - "timeSeconds": 1.000196673, - "uploadBytes": 0, - "downloadBytes": 221632854 - }, - { - "type": "intermediary", - "timeSeconds": 1.028583274, - "uploadBytes": 0, - "downloadBytes": 205186730 - }, - { - "type": "intermediary", - "timeSeconds": 1.000186621, - "uploadBytes": 0, - "downloadBytes": 86530390 - }, - { - "type": "intermediary", - "timeSeconds": 1.000084224, - "uploadBytes": 0, - "downloadBytes": 75854226 - }, - { - "type": "intermediary", - "timeSeconds": 1.00003092, - "uploadBytes": 0, - "downloadBytes": 76724862 - }, - { - "type": "intermediary", - "timeSeconds": 1.000063633, - "uploadBytes": 0, - "downloadBytes": 75964148 - }, - { - "type": "intermediary", - "timeSeconds": 1.000040691, - "uploadBytes": 0, - "downloadBytes": 76864394 - }, - { - "type": "intermediary", - "timeSeconds": 1.000018972, - "uploadBytes": 0, - "downloadBytes": 77186434 - }, - { - "type": "intermediary", - "timeSeconds": 1.00009742, - "uploadBytes": 0, - "downloadBytes": 76769775 - }, - { - "type": "intermediary", - "timeSeconds": 1.000268188, - "uploadBytes": 0, - "downloadBytes": 77865228 - }, - { - "type": "intermediary", - "timeSeconds": 1.000222817, - "uploadBytes": 0, - "downloadBytes": 77633915 - }, - { - "type": "intermediary", - "timeSeconds": 1.000083609, - "uploadBytes": 0, - "downloadBytes": 77806206 - }, - { - "type": "intermediary", - "timeSeconds": 1.000092849, - "uploadBytes": 0, - "downloadBytes": 78456462 - }, - { - "type": "intermediary", - "timeSeconds": 1.000043433, - "uploadBytes": 0, - "downloadBytes": 78417518 - }, - { - "type": "intermediary", - "timeSeconds": 1.000006259, - "uploadBytes": 0, - "downloadBytes": 78412950 - }, - { - "type": "intermediary", - "timeSeconds": 1.000225866, - "uploadBytes": 0, - "downloadBytes": 79184746 - }, - { - "type": "intermediary", - "timeSeconds": 1.000187138, - "uploadBytes": 0, - "downloadBytes": 87343104 - }, - { - "type": "intermediary", - "timeSeconds": 1.000046647, - "uploadBytes": 0, - "downloadBytes": 220970178 - }, - { - "type": "intermediary", - "timeSeconds": 1.000032879, - "uploadBytes": 0, - "downloadBytes": 219890494 - }, - { - "type": "intermediary", - "timeSeconds": 1.000025709, - "uploadBytes": 0, - "downloadBytes": 221339940 - }, - { - "type": "intermediary", - "timeSeconds": 1.000310682, - "uploadBytes": 0, - "downloadBytes": 220147566 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001006, - "uploadBytes": 0, - "downloadBytes": 221067890 - }, - { - "type": "intermediary", - "timeSeconds": 1.000074937, - "uploadBytes": 0, - "downloadBytes": 220296444 - }, - { - "type": "intermediary", - "timeSeconds": 1.000135897, - "uploadBytes": 0, - "downloadBytes": 220273546 - }, - { - "type": "intermediary", - "timeSeconds": 1.000039189, - "uploadBytes": 0, - "downloadBytes": 220446720 - }, - { - "type": "intermediary", - "timeSeconds": 1.000018897, - "uploadBytes": 0, - "downloadBytes": 219958020 - }, - { - "type": "intermediary", - "timeSeconds": 1.000050593, - "uploadBytes": 0, - "downloadBytes": 221075826 - }, - { - "type": "intermediary", - "timeSeconds": 1.000093072, - "uploadBytes": 0, - "downloadBytes": 219585418 - }, - { - "type": "intermediary", - "timeSeconds": 1.000003559, - "uploadBytes": 0, - "downloadBytes": 220908292 - }, - { - "type": "intermediary", - "timeSeconds": 1.000098824, - "uploadBytes": 0, - "downloadBytes": 219572728 - }, - { - "type": "intermediary", - "timeSeconds": 1.000158797, - "uploadBytes": 0, - "downloadBytes": 220550664 - }, - { - "type": "intermediary", - "timeSeconds": 1.000059985, - "uploadBytes": 0, - "downloadBytes": 220092786 - }, - { - "type": "intermediary", - "timeSeconds": 1.000003851, - "uploadBytes": 0, - "downloadBytes": 126746624 - }, - { - "type": "intermediary", - "timeSeconds": 1.000045123, - "uploadBytes": 0, - "downloadBytes": 75595776 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000615, - "uploadBytes": 0, - "downloadBytes": 76079372 - }, - { - "type": "intermediary", - "timeSeconds": 1.0000153, - "uploadBytes": 0, - "downloadBytes": 89653248 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000502, - "uploadBytes": 0, - "downloadBytes": 222598680 - }, - { - "type": "intermediary", - "timeSeconds": 1.028253613, - "uploadBytes": 0, - "downloadBytes": 208492056 - }, - { - "type": "intermediary", - "timeSeconds": 1.000036076, - "uploadBytes": 0, - "downloadBytes": 66704336 - }, - { - "type": "intermediary", - "timeSeconds": 1.000289507, - "uploadBytes": 0, - "downloadBytes": 54184716 - }, - { - "type": "intermediary", - "timeSeconds": 1.000118286, - "uploadBytes": 0, - "downloadBytes": 54491770 - }, - { - "type": "intermediary", - "timeSeconds": 1.000013399, - "uploadBytes": 0, - "downloadBytes": 54622012 - }, - { - "type": "intermediary", - "timeSeconds": 1.000063047, - "uploadBytes": 0, - "downloadBytes": 55193454 - }, - { - "type": "intermediary", - "timeSeconds": 1.00027605, - "uploadBytes": 0, - "downloadBytes": 55551065 - }, - { - "type": "intermediary", - "timeSeconds": 1.000076114, - "uploadBytes": 0, - "downloadBytes": 55513243 - }, - { - "type": "intermediary", - "timeSeconds": 1.000092513, - "uploadBytes": 0, - "downloadBytes": 55690630 - }, - { - "type": "intermediary", - "timeSeconds": 1.000242057, - "uploadBytes": 0, - "downloadBytes": 55997684 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000453, - "uploadBytes": 0, - "downloadBytes": 56214894 - }, - { - "type": "intermediary", - "timeSeconds": 1.000206542, - "uploadBytes": 0, - "downloadBytes": 56447110 - }, - { - "type": "intermediary", - "timeSeconds": 1.000261017, - "uploadBytes": 0, - "downloadBytes": 56921710 - }, - { - "type": "intermediary", - "timeSeconds": 1.000080258, - "uploadBytes": 0, - "downloadBytes": 57214338 - }, - { - "type": "intermediary", - "timeSeconds": 1.000117911, - "uploadBytes": 0, - "downloadBytes": 57457278 - }, - { - "type": "intermediary", - "timeSeconds": 1.000133612, - "uploadBytes": 0, - "downloadBytes": 57583246 - }, - { - "type": "intermediary", - "timeSeconds": 1.000002695, - "uploadBytes": 0, - "downloadBytes": 57750780 - }, - { - "type": "intermediary", - "timeSeconds": 1.000012745, - "uploadBytes": 0, - "downloadBytes": 85762118 - }, - { - "type": "intermediary", - "timeSeconds": 1.000185455, - "uploadBytes": 0, - "downloadBytes": 220520378 - }, - { - "type": "intermediary", - "timeSeconds": 1.000044423, - "uploadBytes": 0, - "downloadBytes": 218628096 - }, - { - "type": "intermediary", - "timeSeconds": 1.000790415, - "uploadBytes": 0, - "downloadBytes": 221396992 - }, - { - "type": "intermediary", - "timeSeconds": 1.000151924, - "uploadBytes": 0, - "downloadBytes": 218560316 - }, - { - "type": "intermediary", - "timeSeconds": 1.000027582, - "uploadBytes": 0, - "downloadBytes": 220951755 - }, - { - "type": "intermediary", - "timeSeconds": 1.00007643, - "uploadBytes": 0, - "downloadBytes": 139426439 - }, - { - "type": "intermediary", - "timeSeconds": 1.000261184, - "uploadBytes": 0, - "downloadBytes": 76454258 - }, - { - "type": "intermediary", - "timeSeconds": 1.000481026, - "uploadBytes": 0, - "downloadBytes": 75464704 - }, - { - "type": "intermediary", - "timeSeconds": 1.000132454, - "uploadBytes": 0, - "downloadBytes": 75890688 - }, - { - "type": "intermediary", - "timeSeconds": 1.000309113, - "uploadBytes": 0, - "downloadBytes": 76972032 - }, - { - "type": "intermediary", - "timeSeconds": 1.000019675, - "uploadBytes": 0, - "downloadBytes": 76201984 - }, - { - "type": "intermediary", - "timeSeconds": 1.00002232, - "uploadBytes": 0, - "downloadBytes": 77567496 - }, - { - "type": "intermediary", - "timeSeconds": 1.000137956, - "uploadBytes": 0, - "downloadBytes": 76976262 - }, - { - "type": "intermediary", - "timeSeconds": 1.000116379, - "uploadBytes": 0, - "downloadBytes": 77276278 - }, - { - "type": "intermediary", - "timeSeconds": 1.000087055, - "uploadBytes": 0, - "downloadBytes": 78083324 - }, - { - "type": "intermediary", - "timeSeconds": 1.000283918, - "uploadBytes": 0, - "downloadBytes": 77561856 - }, - { - "type": "intermediary", - "timeSeconds": 1.000093877, - "uploadBytes": 0, - "downloadBytes": 78875396 - }, - { - "type": "intermediary", - "timeSeconds": 1.000080973, - "uploadBytes": 0, - "downloadBytes": 78218626 - } - ], - "implementation": "quic-go", - "version": "v0.34", - "transportStack": "quic-v1" - }, - { - "result": [ - { - "type": "intermediate", - "timeSeconds": 1.000109616, - "uploadBytes": 0, - "downloadBytes": 2752512 - }, - { - "type": "intermediate", - "timeSeconds": 1.00007651, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000094613, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000093274, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000100186, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.00008546, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000099198, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000080124, - "uploadBytes": 0, - "downloadBytes": 4168704 - }, - { - "type": "intermediate", - "timeSeconds": 1.000093118, - "uploadBytes": 0, - "downloadBytes": 3957760 - }, - { - "type": "intermediate", - "timeSeconds": 1.000083861, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000092544, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.00008763, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.00008133, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000092347, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000080694, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000102538, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000083451, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000101184, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000070716, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000104054, - "uploadBytes": 0, - "downloadBytes": 1577951 - }, - { - "type": "intermediate", - "timeSeconds": 1.00007137, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000096054, - "uploadBytes": 0, - "downloadBytes": 1973281 - }, - { - "type": "intermediate", - "timeSeconds": 1.000077753, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000091273, - "uploadBytes": 0, - "downloadBytes": 1974239 - }, - { - "type": "intermediate", - "timeSeconds": 1.00009839, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000105759, - "uploadBytes": 0, - "downloadBytes": 1973281 - }, - { - "type": "intermediate", - "timeSeconds": 1.00010069, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000105689, - "uploadBytes": 0, - "downloadBytes": 1974239 - }, - { - "type": "intermediate", - "timeSeconds": 1.000100832, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000119209, - "uploadBytes": 0, - "downloadBytes": 1973281 - }, - { - "type": "intermediate", - "timeSeconds": 1.000097436, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000110274, - "uploadBytes": 0, - "downloadBytes": 1974239 - }, - { - "type": "intermediate", - "timeSeconds": 1.00011979, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000113833, - "uploadBytes": 0, - "downloadBytes": 1973281 - }, - { - "type": "intermediate", - "timeSeconds": 1.000072761, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000096264, - "uploadBytes": 0, - "downloadBytes": 1974239 - }, - { - "type": "intermediate", - "timeSeconds": 1.000077837, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000111467, - "uploadBytes": 0, - "downloadBytes": 1973281 - }, - { - "type": "intermediate", - "timeSeconds": 1.000112955, - "uploadBytes": 0, - "downloadBytes": 1709056 - }, - { - "type": "intermediate", - "timeSeconds": 1.000111692, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000116186, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000115234, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000095208, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000080649, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000105444, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000071988, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000091259, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000087258, - "uploadBytes": 0, - "downloadBytes": 1974239 - }, - { - "type": "intermediate", - "timeSeconds": 1.000094635, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000108977, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000092459, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000118352, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000086105, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000086342, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.00009007, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000103159, - "uploadBytes": 0, - "downloadBytes": 1973281 - }, - { - "type": "intermediate", - "timeSeconds": 1.000084749, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000105527, - "uploadBytes": 0, - "downloadBytes": 2752512 - }, - { - "type": "intermediate", - "timeSeconds": 1.000061213, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000107135, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000093815, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000080698, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000093236, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000116113, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000098128, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000063358, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000102599, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000062358, - "uploadBytes": 0, - "downloadBytes": 4060160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000103811, - "uploadBytes": 0, - "downloadBytes": 4066304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000110558, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000103971, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000108346, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000095185, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000092646, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.00006229, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000100985, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000083749, - "uploadBytes": 0, - "downloadBytes": 1709056 - }, - { - "type": "intermediate", - "timeSeconds": 1.000097237, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000100682, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000090024, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000097434, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000090479, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000100606, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000101532, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000068262, - "uploadBytes": 0, - "downloadBytes": 2237407 - }, - { - "type": "intermediate", - "timeSeconds": 1.000084236, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.00008326, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000070698, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000074774, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000079676, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000099183, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000091991, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000100923, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000085905, - "uploadBytes": 0, - "downloadBytes": 2236449 - }, - { - "type": "intermediate", - "timeSeconds": 1.000086011, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000091884, - "uploadBytes": 0, - "downloadBytes": 1709056 - }, - { - "type": "intermediate", - "timeSeconds": 1.000095674, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000081089, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000102483, - "uploadBytes": 0, - "downloadBytes": 1974239 - }, - { - "type": "intermediate", - "timeSeconds": 1.000096543, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000096565, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000072962, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000086868, - "uploadBytes": 0, - "downloadBytes": 1973281 - }, - { - "type": "intermediate", - "timeSeconds": 1.000066942, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000057146, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000085644, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000107085, - "uploadBytes": 0, - "downloadBytes": 1974239 - }, - { - "type": "intermediate", - "timeSeconds": 1.000081969, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000100473, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000073943, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.0000898, - "uploadBytes": 0, - "downloadBytes": 1973281 - }, - { - "type": "intermediate", - "timeSeconds": 1.000092269, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000086034, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000070047, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000117221, - "uploadBytes": 0, - "downloadBytes": 2621440 - }, - { - "type": "intermediate", - "timeSeconds": 1.000093677, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000102808, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000076511, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000091167, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.0000569, - "uploadBytes": 0, - "downloadBytes": 4123648 - }, - { - "type": "intermediate", - "timeSeconds": 1.000100379, - "uploadBytes": 0, - "downloadBytes": 4002816 - }, - { - "type": "intermediate", - "timeSeconds": 1.000068741, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000098169, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000054513, - "uploadBytes": 0, - "downloadBytes": 4002816 - }, - { - "type": "intermediate", - "timeSeconds": 1.000088681, - "uploadBytes": 0, - "downloadBytes": 4123648 - }, - { - "type": "intermediate", - "timeSeconds": 1.000097348, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000084337, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000099319, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000093689, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000093989, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000067821, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000104805, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000110418, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000113155, - "uploadBytes": 0, - "downloadBytes": 2621440 - }, - { - "type": "intermediate", - "timeSeconds": 1.000076369, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000105299, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000068625, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000097326, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000065648, - "uploadBytes": 0, - "downloadBytes": 3965952 - }, - { - "type": "intermediate", - "timeSeconds": 1.000103371, - "uploadBytes": 0, - "downloadBytes": 4160512 - }, - { - "type": "intermediate", - "timeSeconds": 1.000106465, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000077062, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000104729, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.0001068, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000093392, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.00007943, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000079311, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000079108, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000110553, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000107533, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.000095317, - "uploadBytes": 0, - "downloadBytes": 4194304 - }, - { - "type": "intermediate", - "timeSeconds": 1.000098258, - "uploadBytes": 0, - "downloadBytes": 3932160 - }, - { - "type": "intermediate", - "timeSeconds": 1.0001117, - "uploadBytes": 0, - "downloadBytes": 1709056 - }, - { - "type": "intermediate", - "timeSeconds": 1.000076376, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000069989, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000099614, - "uploadBytes": 0, - "downloadBytes": 1974239 - }, - { - "type": "intermediate", - "timeSeconds": 1.000102353, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000093003, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000099102, - "uploadBytes": 0, - "downloadBytes": 1973281 - }, - { - "type": "intermediate", - "timeSeconds": 1.000077207, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.00010312, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.00009992, - "uploadBytes": 0, - "downloadBytes": 1974239 - }, - { - "type": "intermediate", - "timeSeconds": 1.000120187, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000109646, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000074367, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000106728, - "uploadBytes": 0, - "downloadBytes": 1973281 - }, - { - "type": "intermediate", - "timeSeconds": 1.000105028, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000108566, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000108941, - "uploadBytes": 0, - "downloadBytes": 1974239 - }, - { - "type": "intermediate", - "timeSeconds": 1.000087509, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000092042, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000115093, - "uploadBytes": 0, - "downloadBytes": 1577951 - }, - { - "type": "intermediate", - "timeSeconds": 1.000085002, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000084486, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000090726, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000088424, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000083231, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000096737, - "uploadBytes": 0, - "downloadBytes": 1973281 - }, - { - "type": "intermediate", - "timeSeconds": 1.000094649, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000092292, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000071067, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000089755, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000076052, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000079801, - "uploadBytes": 0, - "downloadBytes": 1974239 - }, - { - "type": "intermediate", - "timeSeconds": 1.000110941, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.00008096, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000086616, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.00007378, - "uploadBytes": 0, - "downloadBytes": 2105344 - }, - { - "type": "intermediate", - "timeSeconds": 1.000094156, - "uploadBytes": 0, - "downloadBytes": 1973281 - }, - { - "type": "intermediate", - "timeSeconds": 1.000087382, - "uploadBytes": 0, - "downloadBytes": 2105344 - } - ], - "implementation": "rust-libp2p", - "version": "v0.53", - "transportStack": "tcp" - }, - { - "result": [ - { - "type": "intermediate", - "timeSeconds": 1.000075269, - "uploadBytes": 0, - "downloadBytes": 28510298 - }, - { - "type": "intermediate", - "timeSeconds": 1.000071672, - "uploadBytes": 0, - "downloadBytes": 71999015 - }, - { - "type": "intermediate", - "timeSeconds": 1.000065555, - "uploadBytes": 0, - "downloadBytes": 72140937 - }, - { - "type": "intermediate", - "timeSeconds": 1.000066776, - "uploadBytes": 0, - "downloadBytes": 72660055 - }, - { - "type": "intermediate", - "timeSeconds": 1.000066086, - "uploadBytes": 0, - "downloadBytes": 72651697 - }, - { - "type": "intermediate", - "timeSeconds": 1.000054448, - "uploadBytes": 0, - "downloadBytes": 72594600 - }, - { - "type": "intermediate", - "timeSeconds": 1.000074317, - "uploadBytes": 0, - "downloadBytes": 72963540 - }, - { - "type": "intermediate", - "timeSeconds": 1.000074338, - "uploadBytes": 0, - "downloadBytes": 72906810 - }, - { - "type": "intermediate", - "timeSeconds": 1.00001584, - "uploadBytes": 0, - "downloadBytes": 73048710 - }, - { - "type": "intermediate", - "timeSeconds": 1.000068152, - "uploadBytes": 0, - "downloadBytes": 72736545 - }, - { - "type": "intermediate", - "timeSeconds": 1.000067989, - "uploadBytes": 0, - "downloadBytes": 72977760 - }, - { - "type": "intermediate", - "timeSeconds": 1.000070404, - "uploadBytes": 0, - "downloadBytes": 71621323 - }, - { - "type": "intermediate", - "timeSeconds": 1.000067352, - "uploadBytes": 0, - "downloadBytes": 72787584 - }, - { - "type": "intermediate", - "timeSeconds": 1.000070623, - "uploadBytes": 0, - "downloadBytes": 72911067 - }, - { - "type": "intermediate", - "timeSeconds": 1.000068668, - "uploadBytes": 0, - "downloadBytes": 72902538 - }, - { - "type": "intermediate", - "timeSeconds": 1.000071188, - "uploadBytes": 0, - "downloadBytes": 72809420 - }, - { - "type": "intermediate", - "timeSeconds": 1.000068638, - "uploadBytes": 0, - "downloadBytes": 73323875 - }, - { - "type": "intermediate", - "timeSeconds": 1.000070217, - "uploadBytes": 0, - "downloadBytes": 73323845 - }, - { - "type": "intermediate", - "timeSeconds": 1.000068617, - "uploadBytes": 0, - "downloadBytes": 73189465 - }, - { - "type": "intermediate", - "timeSeconds": 1.000081347, - "uploadBytes": 0, - "downloadBytes": 28982739 - }, - { - "type": "intermediate", - "timeSeconds": 1.000080192, - "uploadBytes": 0, - "downloadBytes": 73237791 - }, - { - "type": "intermediate", - "timeSeconds": 1.000012996, - "uploadBytes": 0, - "downloadBytes": 73229595 - }, - { - "type": "intermediate", - "timeSeconds": 1.000076408, - "uploadBytes": 0, - "downloadBytes": 73209104 - }, - { - "type": "intermediate", - "timeSeconds": 1.000069519, - "uploadBytes": 0, - "downloadBytes": 72822057 - }, - { - "type": "intermediate", - "timeSeconds": 1.000069558, - "uploadBytes": 0, - "downloadBytes": 73304125 - }, - { - "type": "intermediate", - "timeSeconds": 1.00008323, - "uploadBytes": 0, - "downloadBytes": 73162215 - }, - { - "type": "intermediate", - "timeSeconds": 1.000080336, - "uploadBytes": 0, - "downloadBytes": 73304085 - }, - { - "type": "intermediate", - "timeSeconds": 1.000046542, - "uploadBytes": 0, - "downloadBytes": 72963555 - }, - { - "type": "intermediate", - "timeSeconds": 1.000074654, - "uploadBytes": 0, - "downloadBytes": 73275735 - }, - { - "type": "intermediate", - "timeSeconds": 1.000074217, - "uploadBytes": 0, - "downloadBytes": 73190565 - }, - { - "type": "intermediate", - "timeSeconds": 1.000074971, - "uploadBytes": 0, - "downloadBytes": 73218960 - }, - { - "type": "intermediate", - "timeSeconds": 1.00008846, - "uploadBytes": 0, - "downloadBytes": 73226070 - }, - { - "type": "intermediate", - "timeSeconds": 1.000072685, - "uploadBytes": 0, - "downloadBytes": 72875637 - }, - { - "type": "intermediate", - "timeSeconds": 1.000068825, - "uploadBytes": 0, - "downloadBytes": 73384983 - }, - { - "type": "intermediate", - "timeSeconds": 1.00006708, - "uploadBytes": 0, - "downloadBytes": 73239770 - }, - { - "type": "intermediate", - "timeSeconds": 1.000073031, - "uploadBytes": 0, - "downloadBytes": 73608260 - }, - { - "type": "intermediate", - "timeSeconds": 1.000065446, - "uploadBytes": 0, - "downloadBytes": 73185205 - }, - { - "type": "intermediate", - "timeSeconds": 1.000070805, - "uploadBytes": 0, - "downloadBytes": 73093215 - }, - { - "type": "intermediate", - "timeSeconds": 1.000078463, - "uploadBytes": 0, - "downloadBytes": 28808360 - }, - { - "type": "intermediate", - "timeSeconds": 1.000064237, - "uploadBytes": 0, - "downloadBytes": 72793644 - }, - { - "type": "intermediate", - "timeSeconds": 1.000078468, - "uploadBytes": 0, - "downloadBytes": 72055764 - }, - { - "type": "intermediate", - "timeSeconds": 1.000061279, - "uploadBytes": 0, - "downloadBytes": 72254428 - }, - { - "type": "intermediate", - "timeSeconds": 1.000070688, - "uploadBytes": 0, - "downloadBytes": 72963540 - }, - { - "type": "intermediate", - "timeSeconds": 1.000092262, - "uploadBytes": 0, - "downloadBytes": 72537885 - }, - { - "type": "intermediate", - "timeSeconds": 1.000072007, - "uploadBytes": 0, - "downloadBytes": 72651390 - }, - { - "type": "intermediate", - "timeSeconds": 1.000079925, - "uploadBytes": 0, - "downloadBytes": 72225675 - }, - { - "type": "intermediate", - "timeSeconds": 1.000075918, - "uploadBytes": 0, - "downloadBytes": 72651375 - }, - { - "type": "intermediate", - "timeSeconds": 1.000057619, - "uploadBytes": 0, - "downloadBytes": 72338508 - }, - { - "type": "intermediate", - "timeSeconds": 1.00007199, - "uploadBytes": 0, - "downloadBytes": 72765672 - }, - { - "type": "intermediate", - "timeSeconds": 1.000078346, - "uploadBytes": 0, - "downloadBytes": 72850020 - }, - { - "type": "intermediate", - "timeSeconds": 1.000068431, - "uploadBytes": 0, - "downloadBytes": 72367575 - }, - { - "type": "intermediate", - "timeSeconds": 1.000063986, - "uploadBytes": 0, - "downloadBytes": 72395970 - }, - { - "type": "intermediate", - "timeSeconds": 1.000076365, - "uploadBytes": 0, - "downloadBytes": 72827316 - }, - { - "type": "intermediate", - "timeSeconds": 1.000081314, - "uploadBytes": 0, - "downloadBytes": 73089368 - }, - { - "type": "intermediate", - "timeSeconds": 1.000074384, - "uploadBytes": 0, - "downloadBytes": 73097550 - }, - { - "type": "intermediate", - "timeSeconds": 1.000072327, - "uploadBytes": 0, - "downloadBytes": 72644660 - }, - { - "type": "intermediate", - "timeSeconds": 1.000067953, - "uploadBytes": 0, - "downloadBytes": 72588075 - }, - { - "type": "intermediate", - "timeSeconds": 1.000078985, - "uploadBytes": 0, - "downloadBytes": 27578627 - }, - { - "type": "intermediate", - "timeSeconds": 1.000021799, - "uploadBytes": 0, - "downloadBytes": 72165038 - }, - { - "type": "intermediate", - "timeSeconds": 1.0000632, - "uploadBytes": 0, - "downloadBytes": 72055797 - }, - { - "type": "intermediate", - "timeSeconds": 1.00007306, - "uploadBytes": 0, - "downloadBytes": 72084166 - }, - { - "type": "intermediate", - "timeSeconds": 1.000053156, - "uploadBytes": 0, - "downloadBytes": 72651755 - }, - { - "type": "intermediate", - "timeSeconds": 1.000068466, - "uploadBytes": 0, - "downloadBytes": 72316567 - }, - { - "type": "intermediate", - "timeSeconds": 1.000070527, - "uploadBytes": 0, - "downloadBytes": 72191604 - }, - { - "type": "intermediate", - "timeSeconds": 1.000066365, - "uploadBytes": 0, - "downloadBytes": 72029868 - }, - { - "type": "intermediate", - "timeSeconds": 1.000066616, - "uploadBytes": 0, - "downloadBytes": 72080937 - }, - { - "type": "intermediate", - "timeSeconds": 1.000058253, - "uploadBytes": 0, - "downloadBytes": 71944773 - }, - { - "type": "intermediate", - "timeSeconds": 1.000078851, - "uploadBytes": 0, - "downloadBytes": 72137742 - }, - { - "type": "intermediate", - "timeSeconds": 1.000073937, - "uploadBytes": 0, - "downloadBytes": 72027045 - }, - { - "type": "intermediate", - "timeSeconds": 1.000069543, - "uploadBytes": 0, - "downloadBytes": 72112155 - }, - { - "type": "intermediate", - "timeSeconds": 1.000048204, - "uploadBytes": 0, - "downloadBytes": 72452730 - }, - { - "type": "intermediate", - "timeSeconds": 1.000077213, - "uploadBytes": 0, - "downloadBytes": 72622980 - }, - { - "type": "intermediate", - "timeSeconds": 1.000072224, - "uploadBytes": 0, - "downloadBytes": 72857389 - }, - { - "type": "intermediate", - "timeSeconds": 1.000073336, - "uploadBytes": 0, - "downloadBytes": 72389975 - }, - { - "type": "intermediate", - "timeSeconds": 1.000070964, - "uploadBytes": 0, - "downloadBytes": 72191875 - }, - { - "type": "intermediate", - "timeSeconds": 1.000070198, - "uploadBytes": 0, - "downloadBytes": 72078675 - }, - { - "type": "intermediate", - "timeSeconds": 1.000078608, - "uploadBytes": 0, - "downloadBytes": 28106522 - }, - { - "type": "intermediate", - "timeSeconds": 1.000061348, - "uploadBytes": 0, - "downloadBytes": 72543911 - }, - { - "type": "intermediate", - "timeSeconds": 1.000065079, - "uploadBytes": 0, - "downloadBytes": 72475810 - }, - { - "type": "intermediate", - "timeSeconds": 1.000067776, - "uploadBytes": 0, - "downloadBytes": 72826281 - }, - { - "type": "intermediate", - "timeSeconds": 1.000071101, - "uploadBytes": 0, - "downloadBytes": 73243478 - }, - { - "type": "intermediate", - "timeSeconds": 1.000066468, - "uploadBytes": 0, - "downloadBytes": 72793314 - }, - { - "type": "intermediate", - "timeSeconds": 1.000070012, - "uploadBytes": 0, - "downloadBytes": 72339225 - }, - { - "type": "intermediate", - "timeSeconds": 1.000073862, - "uploadBytes": 0, - "downloadBytes": 72452730 - }, - { - "type": "intermediate", - "timeSeconds": 1.000075275, - "uploadBytes": 0, - "downloadBytes": 72793260 - }, - { - "type": "intermediate", - "timeSeconds": 1.000011657, - "uploadBytes": 0, - "downloadBytes": 72483918 - }, - { - "type": "intermediate", - "timeSeconds": 1.000054336, - "uploadBytes": 0, - "downloadBytes": 72818817 - }, - { - "type": "intermediate", - "timeSeconds": 1.000072393, - "uploadBytes": 0, - "downloadBytes": 72481095 - }, - { - "type": "intermediate", - "timeSeconds": 1.000069512, - "uploadBytes": 0, - "downloadBytes": 72736515 - }, - { - "type": "intermediate", - "timeSeconds": 1.000066661, - "uploadBytes": 0, - "downloadBytes": 73077060 - }, - { - "type": "intermediate", - "timeSeconds": 1.000066216, - "uploadBytes": 0, - "downloadBytes": 73247325 - }, - { - "type": "intermediate", - "timeSeconds": 1.000068279, - "uploadBytes": 0, - "downloadBytes": 72863199 - }, - { - "type": "intermediate", - "timeSeconds": 1.000075998, - "uploadBytes": 0, - "downloadBytes": 72757875 - }, - { - "type": "intermediate", - "timeSeconds": 1.00006363, - "uploadBytes": 0, - "downloadBytes": 72620605 - }, - { - "type": "intermediate", - "timeSeconds": 1.000071489, - "uploadBytes": 0, - "downloadBytes": 72934750 - }, - { - "type": "intermediate", - "timeSeconds": 1.000113987, - "uploadBytes": 0, - "downloadBytes": 27671815 - }, - { - "type": "intermediate", - "timeSeconds": 1.000063843, - "uploadBytes": 0, - "downloadBytes": 72024557 - }, - { - "type": "intermediate", - "timeSeconds": 1.000081946, - "uploadBytes": 0, - "downloadBytes": 72339575 - }, - { - "type": "intermediate", - "timeSeconds": 1.000079778, - "uploadBytes": 0, - "downloadBytes": 72424715 - }, - { - "type": "intermediate", - "timeSeconds": 1.000083741, - "uploadBytes": 0, - "downloadBytes": 72316867 - }, - { - "type": "intermediate", - "timeSeconds": 1.000066658, - "uploadBytes": 0, - "downloadBytes": 71624049 - }, - { - "type": "intermediate", - "timeSeconds": 1.000071722, - "uploadBytes": 0, - "downloadBytes": 71775852 - }, - { - "type": "intermediate", - "timeSeconds": 1.000080021, - "uploadBytes": 0, - "downloadBytes": 71739078 - }, - { - "type": "intermediate", - "timeSeconds": 1.000042498, - "uploadBytes": 0, - "downloadBytes": 71998635 - }, - { - "type": "intermediate", - "timeSeconds": 1.000067377, - "uploadBytes": 0, - "downloadBytes": 71896482 - }, - { - "type": "intermediate", - "timeSeconds": 1.000077595, - "uploadBytes": 0, - "downloadBytes": 71845398 - }, - { - "type": "intermediate", - "timeSeconds": 1.000038226, - "uploadBytes": 0, - "downloadBytes": 70821075 - }, - { - "type": "intermediate", - "timeSeconds": 1.000053327, - "uploadBytes": 0, - "downloadBytes": 71941920 - }, - { - "type": "intermediate", - "timeSeconds": 1.000069169, - "uploadBytes": 0, - "downloadBytes": 70528551 - }, - { - "type": "intermediate", - "timeSeconds": 1.0000712, - "uploadBytes": 0, - "downloadBytes": 71652414 - }, - { - "type": "intermediate", - "timeSeconds": 1.000077679, - "uploadBytes": 0, - "downloadBytes": 71266411 - }, - { - "type": "intermediate", - "timeSeconds": 1.000069744, - "uploadBytes": 0, - "downloadBytes": 71171690 - }, - { - "type": "intermediate", - "timeSeconds": 1.000071363, - "uploadBytes": 0, - "downloadBytes": 71454705 - }, - { - "type": "intermediate", - "timeSeconds": 1.000071966, - "uploadBytes": 0, - "downloadBytes": 71651480 - }, - { - "type": "intermediate", - "timeSeconds": 1.00007709, - "uploadBytes": 0, - "downloadBytes": 27935694 - }, - { - "type": "intermediate", - "timeSeconds": 1.00007233, - "uploadBytes": 0, - "downloadBytes": 72254435 - }, - { - "type": "intermediate", - "timeSeconds": 1.000071908, - "uploadBytes": 0, - "downloadBytes": 72282793 - }, - { - "type": "intermediate", - "timeSeconds": 1.00006333, - "uploadBytes": 0, - "downloadBytes": 72428956 - }, - { - "type": "intermediate", - "timeSeconds": 1.000080952, - "uploadBytes": 0, - "downloadBytes": 72282435 - }, - { - "type": "intermediate", - "timeSeconds": 1.000076358, - "uploadBytes": 0, - "downloadBytes": 72193053 - }, - { - "type": "intermediate", - "timeSeconds": 1.000074156, - "uploadBytes": 0, - "downloadBytes": 72001473 - }, - { - "type": "intermediate", - "timeSeconds": 1.00005552, - "uploadBytes": 0, - "downloadBytes": 71831223 - }, - { - "type": "intermediate", - "timeSeconds": 1.000058939, - "uploadBytes": 0, - "downloadBytes": 72503784 - }, - { - "type": "intermediate", - "timeSeconds": 1.000072312, - "uploadBytes": 0, - "downloadBytes": 71885115 - }, - { - "type": "intermediate", - "timeSeconds": 1.000077839, - "uploadBytes": 0, - "downloadBytes": 72140595 - }, - { - "type": "intermediate", - "timeSeconds": 1.000044703, - "uploadBytes": 0, - "downloadBytes": 72542097 - }, - { - "type": "intermediate", - "timeSeconds": 1.000084349, - "uploadBytes": 0, - "downloadBytes": 72703908 - }, - { - "type": "intermediate", - "timeSeconds": 1.000060292, - "uploadBytes": 0, - "downloadBytes": 72488175 - }, - { - "type": "intermediate", - "timeSeconds": 1.000072317, - "uploadBytes": 0, - "downloadBytes": 72417285 - }, - { - "type": "intermediate", - "timeSeconds": 1.000070758, - "uploadBytes": 0, - "downloadBytes": 72376444 - }, - { - "type": "intermediate", - "timeSeconds": 1.00007129, - "uploadBytes": 0, - "downloadBytes": 72300860 - }, - { - "type": "intermediate", - "timeSeconds": 1.000072854, - "uploadBytes": 0, - "downloadBytes": 72729545 - }, - { - "type": "intermediate", - "timeSeconds": 1.000081533, - "uploadBytes": 0, - "downloadBytes": 72483380 - }, - { - "type": "intermediate", - "timeSeconds": 1.000075428, - "uploadBytes": 0, - "downloadBytes": 27381398 - }, - { - "type": "intermediate", - "timeSeconds": 1.000073077, - "uploadBytes": 0, - "downloadBytes": 71999026 - }, - { - "type": "intermediate", - "timeSeconds": 1.000077192, - "uploadBytes": 0, - "downloadBytes": 71943674 - }, - { - "type": "intermediate", - "timeSeconds": 1.000070939, - "uploadBytes": 0, - "downloadBytes": 71742209 - }, - { - "type": "intermediate", - "timeSeconds": 1.000068787, - "uploadBytes": 0, - "downloadBytes": 71861024 - }, - { - "type": "intermediate", - "timeSeconds": 1.000073125, - "uploadBytes": 0, - "downloadBytes": 71767368 - }, - { - "type": "intermediate", - "timeSeconds": 1.000082848, - "uploadBytes": 0, - "downloadBytes": 71913495 - }, - { - "type": "intermediate", - "timeSeconds": 1.000072537, - "uploadBytes": 0, - "downloadBytes": 71941890 - }, - { - "type": "intermediate", - "timeSeconds": 1.000074646, - "uploadBytes": 0, - "downloadBytes": 71716269 - }, - { - "type": "intermediate", - "timeSeconds": 1.000065215, - "uploadBytes": 0, - "downloadBytes": 71713446 - }, - { - "type": "intermediate", - "timeSeconds": 1.000069944, - "uploadBytes": 0, - "downloadBytes": 72462648 - }, - { - "type": "intermediate", - "timeSeconds": 1.000070633, - "uploadBytes": 0, - "downloadBytes": 72327873 - }, - { - "type": "intermediate", - "timeSeconds": 1.000074241, - "uploadBytes": 0, - "downloadBytes": 72255504 - }, - { - "type": "intermediate", - "timeSeconds": 1.000081964, - "uploadBytes": 0, - "downloadBytes": 71800005 - }, - { - "type": "intermediate", - "timeSeconds": 1.000068978, - "uploadBytes": 0, - "downloadBytes": 71917752 - }, - { - "type": "intermediate", - "timeSeconds": 1.000071815, - "uploadBytes": 0, - "downloadBytes": 71363666 - }, - { - "type": "intermediate", - "timeSeconds": 1.000071721, - "uploadBytes": 0, - "downloadBytes": 71767390 - }, - { - "type": "intermediate", - "timeSeconds": 1.000065607, - "uploadBytes": 0, - "downloadBytes": 71824065 - }, - { - "type": "intermediate", - "timeSeconds": 1.000070641, - "uploadBytes": 0, - "downloadBytes": 71658420 - }, - { - "type": "intermediate", - "timeSeconds": 1.000086125, - "uploadBytes": 0, - "downloadBytes": 29403015 - }, - { - "type": "intermediate", - "timeSeconds": 1.000073257, - "uploadBytes": 0, - "downloadBytes": 73097332 - }, - { - "type": "intermediate", - "timeSeconds": 1.000066668, - "uploadBytes": 0, - "downloadBytes": 72765253 - }, - { - "type": "intermediate", - "timeSeconds": 1.000078713, - "uploadBytes": 0, - "downloadBytes": 72680025 - }, - { - "type": "intermediate", - "timeSeconds": 1.00007107, - "uploadBytes": 0, - "downloadBytes": 73304145 - }, - { - "type": "intermediate", - "timeSeconds": 1.000073526, - "uploadBytes": 0, - "downloadBytes": 73077060 - }, - { - "type": "intermediate", - "timeSeconds": 1.000068157, - "uploadBytes": 0, - "downloadBytes": 73275750 - }, - { - "type": "intermediate", - "timeSeconds": 1.000073366, - "uploadBytes": 0, - "downloadBytes": 73105440 - }, - { - "type": "intermediate", - "timeSeconds": 1.000071984, - "uploadBytes": 0, - "downloadBytes": 73133850 - }, - { - "type": "intermediate", - "timeSeconds": 1.000072486, - "uploadBytes": 0, - "downloadBytes": 72991920 - }, - { - "type": "intermediate", - "timeSeconds": 1.000074394, - "uploadBytes": 0, - "downloadBytes": 72991935 - }, - { - "type": "intermediate", - "timeSeconds": 1.000055117, - "uploadBytes": 0, - "downloadBytes": 73474380 - }, - { - "type": "intermediate", - "timeSeconds": 1.000072836, - "uploadBytes": 0, - "downloadBytes": 73531185 - }, - { - "type": "intermediate", - "timeSeconds": 1.000074223, - "uploadBytes": 0, - "downloadBytes": 73538220 - }, - { - "type": "intermediate", - "timeSeconds": 1.000071129, - "uploadBytes": 0, - "downloadBytes": 73211880 - }, - { - "type": "intermediate", - "timeSeconds": 1.000070831, - "uploadBytes": 0, - "downloadBytes": 73158522 - }, - { - "type": "intermediate", - "timeSeconds": 1.000076516, - "uploadBytes": 0, - "downloadBytes": 73206445 - }, - { - "type": "intermediate", - "timeSeconds": 1.000072586, - "uploadBytes": 0, - "downloadBytes": 73238945 - }, - { - "type": "intermediate", - "timeSeconds": 1.000073729, - "uploadBytes": 0, - "downloadBytes": 73183775 - }, - { - "type": "intermediate", - "timeSeconds": 1.000075767, - "uploadBytes": 0, - "downloadBytes": 28547330 - }, - { - "type": "intermediate", - "timeSeconds": 1.000074415, - "uploadBytes": 0, - "downloadBytes": 72481464 - }, - { - "type": "intermediate", - "timeSeconds": 1.000071562, - "uploadBytes": 0, - "downloadBytes": 72680124 - }, - { - "type": "intermediate", - "timeSeconds": 1.000084055, - "uploadBytes": 0, - "downloadBytes": 72481475 - }, - { - "type": "intermediate", - "timeSeconds": 1.000070304, - "uploadBytes": 0, - "downloadBytes": 72316882 - }, - { - "type": "intermediate", - "timeSeconds": 1.000073642, - "uploadBytes": 0, - "downloadBytes": 72049704 - }, - { - "type": "intermediate", - "timeSeconds": 1.00007177, - "uploadBytes": 0, - "downloadBytes": 72112200 - }, - { - "type": "intermediate", - "timeSeconds": 1.00007134, - "uploadBytes": 0, - "downloadBytes": 71885115 - }, - { - "type": "intermediate", - "timeSeconds": 1.000074996, - "uploadBytes": 0, - "downloadBytes": 72225705 - }, - { - "type": "intermediate", - "timeSeconds": 1.000072657, - "uploadBytes": 0, - "downloadBytes": 72112170 - }, - { - "type": "intermediate", - "timeSeconds": 1.000066872, - "uploadBytes": 0, - "downloadBytes": 72483963 - }, - { - "type": "intermediate", - "timeSeconds": 1.000076873, - "uploadBytes": 0, - "downloadBytes": 72591777 - }, - { - "type": "intermediate", - "timeSeconds": 1.000076675, - "uploadBytes": 0, - "downloadBytes": 72452730 - }, - { - "type": "intermediate", - "timeSeconds": 1.000075945, - "uploadBytes": 0, - "downloadBytes": 72282465 - }, - { - "type": "intermediate", - "timeSeconds": 1.000073288, - "uploadBytes": 0, - "downloadBytes": 72254100 - }, - { - "type": "intermediate", - "timeSeconds": 1.000074552, - "uploadBytes": 0, - "downloadBytes": 72234755 - }, - { - "type": "intermediate", - "timeSeconds": 1.000069949, - "uploadBytes": 0, - "downloadBytes": 72213115 - }, - { - "type": "intermediate", - "timeSeconds": 1.00007651, - "uploadBytes": 0, - "downloadBytes": 72361690 - }, - { - "type": "intermediate", - "timeSeconds": 1.000024637, - "uploadBytes": 0, - "downloadBytes": 72133875 - } - ], - "implementation": "rust-libp2p", - "version": "v0.53", - "transportStack": "quic-v1" - }, - { - "result": [ - { - "type": "intermediary", - "timeSeconds": 1.000038131, - "uploadBytes": 0, - "downloadBytes": 159703040 - }, - { - "type": "intermediary", - "timeSeconds": 1.000050019, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000058113, - "uploadBytes": 0, - "downloadBytes": 597262336 - }, - { - "type": "intermediary", - "timeSeconds": 1.000052672, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000037, - "uploadBytes": 0, - "downloadBytes": 597237760 - }, - { - "type": "intermediary", - "timeSeconds": 1.000007588, - "uploadBytes": 0, - "downloadBytes": 597237760 - }, - { - "type": "intermediary", - "timeSeconds": 1.000006255, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000006036, - "uploadBytes": 0, - "downloadBytes": 597213184 - }, - { - "type": "intermediary", - "timeSeconds": 1.000038921, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000019216, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000025204, - "uploadBytes": 0, - "downloadBytes": 597262336 - }, - { - "type": "intermediary", - "timeSeconds": 1.000039686, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.00002249, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000003075, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.0000276, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.0000745, - "uploadBytes": 0, - "downloadBytes": 597262336 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001495, - "uploadBytes": 0, - "downloadBytes": 597262336 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000249, - "uploadBytes": 0, - "downloadBytes": 597213184 - }, - { - "type": "intermediary", - "timeSeconds": 1.000068974, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.00002453, - "uploadBytes": 0, - "downloadBytes": 142172160 - }, - { - "type": "intermediary", - "timeSeconds": 1.000074935, - "uploadBytes": 0, - "downloadBytes": 597164032 - }, - { - "type": "intermediary", - "timeSeconds": 1.000003813, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000915, - "uploadBytes": 0, - "downloadBytes": 597262336 - }, - { - "type": "intermediary", - "timeSeconds": 1.000027575, - "uploadBytes": 0, - "downloadBytes": 597180416 - }, - { - "type": "intermediary", - "timeSeconds": 1.000002725, - "uploadBytes": 0, - "downloadBytes": 597164032 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001557, - "uploadBytes": 0, - "downloadBytes": 597180416 - }, - { - "type": "intermediary", - "timeSeconds": 1.000030096, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000003483, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.00006381, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000532, - "uploadBytes": 0, - "downloadBytes": 597213184 - }, - { - "type": "intermediary", - "timeSeconds": 1.000070215, - "uploadBytes": 0, - "downloadBytes": 597295104 - }, - { - "type": "intermediary", - "timeSeconds": 1.000030267, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.00014428, - "uploadBytes": 0, - "downloadBytes": 597295104 - }, - { - "type": "intermediary", - "timeSeconds": 1.000002243, - "uploadBytes": 0, - "downloadBytes": 597311488 - }, - { - "type": "intermediary", - "timeSeconds": 1.000002548, - "uploadBytes": 0, - "downloadBytes": 597180416 - }, - { - "type": "intermediary", - "timeSeconds": 1.000011665, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000026056, - "uploadBytes": 0, - "downloadBytes": 597196800 - }, - { - "type": "intermediary", - "timeSeconds": 1.000021255, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000024088, - "uploadBytes": 0, - "downloadBytes": 185688064 - }, - { - "type": "intermediary", - "timeSeconds": 1.000025519, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000046742, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.00000618, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000036858, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000014738, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000017816, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000003582, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000017925, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.00004837, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001283, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000039309, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000011867, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000010673, - "uploadBytes": 0, - "downloadBytes": 597114880 - }, - { - "type": "intermediary", - "timeSeconds": 1.000003176, - "uploadBytes": 0, - "downloadBytes": 597295104 - }, - { - "type": "intermediary", - "timeSeconds": 1.000106823, - "uploadBytes": 0, - "downloadBytes": 597213184 - }, - { - "type": "intermediary", - "timeSeconds": 1.000009717, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.00005578, - "uploadBytes": 0, - "downloadBytes": 597262336 - }, - { - "type": "intermediary", - "timeSeconds": 1.000013592, - "uploadBytes": 0, - "downloadBytes": 597278720 - }, - { - "type": "intermediary", - "timeSeconds": 1.000009608, - "uploadBytes": 0, - "downloadBytes": 109518848 - }, - { - "type": "intermediary", - "timeSeconds": 1.000119031, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000006717, - "uploadBytes": 0, - "downloadBytes": 597295104 - }, - { - "type": "intermediary", - "timeSeconds": 1.000003852, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000021693, - "uploadBytes": 0, - "downloadBytes": 597180416 - }, - { - "type": "intermediary", - "timeSeconds": 1.000040175, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000004749, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.0000496, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000016845, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000082306, - "uploadBytes": 0, - "downloadBytes": 597278720 - }, - { - "type": "intermediary", - "timeSeconds": 1.000131074, - "uploadBytes": 0, - "downloadBytes": 597295104 - }, - { - "type": "intermediary", - "timeSeconds": 1.000016889, - "uploadBytes": 0, - "downloadBytes": 597278720 - }, - { - "type": "intermediary", - "timeSeconds": 1.000010407, - "uploadBytes": 0, - "downloadBytes": 597262336 - }, - { - "type": "intermediary", - "timeSeconds": 1.000003415, - "uploadBytes": 0, - "downloadBytes": 597164032 - }, - { - "type": "intermediary", - "timeSeconds": 1.000162508, - "uploadBytes": 0, - "downloadBytes": 597295104 - }, - { - "type": "intermediary", - "timeSeconds": 1.000099236, - "uploadBytes": 0, - "downloadBytes": 597295104 - }, - { - "type": "intermediary", - "timeSeconds": 1.000138541, - "uploadBytes": 0, - "downloadBytes": 597295104 - }, - { - "type": "intermediary", - "timeSeconds": 1.000014793, - "uploadBytes": 0, - "downloadBytes": 597262336 - }, - { - "type": "intermediary", - "timeSeconds": 1.000023576, - "uploadBytes": 0, - "downloadBytes": 597196800 - }, - { - "type": "intermediary", - "timeSeconds": 1.000004884, - "uploadBytes": 0, - "downloadBytes": 144154624 - }, - { - "type": "intermediary", - "timeSeconds": 1.000051191, - "uploadBytes": 0, - "downloadBytes": 597164032 - }, - { - "type": "intermediary", - "timeSeconds": 1.000010715, - "uploadBytes": 0, - "downloadBytes": 591036416 - }, - { - "type": "intermediary", - "timeSeconds": 1.000072697, - "uploadBytes": 0, - "downloadBytes": 477626368 - }, - { - "type": "intermediary", - "timeSeconds": 1.000011805, - "uploadBytes": 0, - "downloadBytes": 438829056 - }, - { - "type": "intermediary", - "timeSeconds": 1.00016395, - "uploadBytes": 0, - "downloadBytes": 450035712 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001203, - "uploadBytes": 0, - "downloadBytes": 458817536 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001053, - "uploadBytes": 0, - "downloadBytes": 468025344 - }, - { - "type": "intermediary", - "timeSeconds": 1.000007313, - "uploadBytes": 0, - "downloadBytes": 476217344 - }, - { - "type": "intermediary", - "timeSeconds": 1.000003489, - "uploadBytes": 0, - "downloadBytes": 482689024 - }, - { - "type": "intermediary", - "timeSeconds": 1.000014395, - "uploadBytes": 0, - "downloadBytes": 487014400 - }, - { - "type": "intermediary", - "timeSeconds": 1.000006512, - "uploadBytes": 0, - "downloadBytes": 426065920 - }, - { - "type": "intermediary", - "timeSeconds": 1.000004156, - "uploadBytes": 0, - "downloadBytes": 356597760 - }, - { - "type": "intermediary", - "timeSeconds": 1.000132072, - "uploadBytes": 0, - "downloadBytes": 364969984 - }, - { - "type": "intermediary", - "timeSeconds": 1.000002644, - "uploadBytes": 0, - "downloadBytes": 373096448 - }, - { - "type": "intermediary", - "timeSeconds": 1.00009657, - "uploadBytes": 0, - "downloadBytes": 381534208 - }, - { - "type": "intermediary", - "timeSeconds": 1.000074518, - "uploadBytes": 0, - "downloadBytes": 388349952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000043481, - "uploadBytes": 0, - "downloadBytes": 393314304 - }, - { - "type": "intermediary", - "timeSeconds": 1.000067479, - "uploadBytes": 0, - "downloadBytes": 399474688 - }, - { - "type": "intermediary", - "timeSeconds": 1.000056104, - "uploadBytes": 0, - "downloadBytes": 163192832 - }, - { - "type": "intermediary", - "timeSeconds": 1.000019381, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.00000492, - "uploadBytes": 0, - "downloadBytes": 597295104 - }, - { - "type": "intermediary", - "timeSeconds": 1.000028615, - "uploadBytes": 0, - "downloadBytes": 597164032 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001364, - "uploadBytes": 0, - "downloadBytes": 597311488 - }, - { - "type": "intermediary", - "timeSeconds": 1.000014797, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000004297, - "uploadBytes": 0, - "downloadBytes": 597213184 - }, - { - "type": "intermediary", - "timeSeconds": 1.000204009, - "uploadBytes": 0, - "downloadBytes": 565952512 - }, - { - "type": "intermediary", - "timeSeconds": 1.000152452, - "uploadBytes": 0, - "downloadBytes": 567164928 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001811, - "uploadBytes": 0, - "downloadBytes": 527892480 - }, - { - "type": "intermediary", - "timeSeconds": 1.000092578, - "uploadBytes": 0, - "downloadBytes": 423084032 - }, - { - "type": "intermediary", - "timeSeconds": 1.000017154, - "uploadBytes": 0, - "downloadBytes": 434307072 - }, - { - "type": "intermediary", - "timeSeconds": 1.000040736, - "uploadBytes": 0, - "downloadBytes": 443498496 - }, - { - "type": "intermediary", - "timeSeconds": 1.000060388, - "uploadBytes": 0, - "downloadBytes": 452968448 - }, - { - "type": "intermediary", - "timeSeconds": 1.000225746, - "uploadBytes": 0, - "downloadBytes": 461455360 - }, - { - "type": "intermediary", - "timeSeconds": 1.000202907, - "uploadBytes": 0, - "downloadBytes": 468697088 - }, - { - "type": "intermediary", - "timeSeconds": 1.000229242, - "uploadBytes": 0, - "downloadBytes": 472875008 - }, - { - "type": "intermediary", - "timeSeconds": 1.000047229, - "uploadBytes": 0, - "downloadBytes": 480624640 - }, - { - "type": "intermediary", - "timeSeconds": 1.000011184, - "uploadBytes": 0, - "downloadBytes": 484294656 - }, - { - "type": "intermediary", - "timeSeconds": 1.000016531, - "uploadBytes": 0, - "downloadBytes": 171220992 - }, - { - "type": "intermediary", - "timeSeconds": 1.000026185, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000044971, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000002118, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000045534, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000023553, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000048212, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.00002894, - "uploadBytes": 0, - "downloadBytes": 597278720 - }, - { - "type": "intermediary", - "timeSeconds": 1.000064599, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000026163, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000034254, - "uploadBytes": 0, - "downloadBytes": 597147648 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000876, - "uploadBytes": 0, - "downloadBytes": 597344256 - }, - { - "type": "intermediary", - "timeSeconds": 1.000042451, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000003077, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.00000749, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000047726, - "uploadBytes": 0, - "downloadBytes": 597213184 - }, - { - "type": "intermediary", - "timeSeconds": 1.000014616, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000013997, - "uploadBytes": 0, - "downloadBytes": 597213184 - }, - { - "type": "intermediary", - "timeSeconds": 1.000004036, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000002808, - "uploadBytes": 0, - "downloadBytes": 196829184 - }, - { - "type": "intermediary", - "timeSeconds": 1.00004814, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000987, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000032033, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000044928, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000067256, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000026737, - "uploadBytes": 0, - "downloadBytes": 597262336 - }, - { - "type": "intermediary", - "timeSeconds": 1.00004202, - "uploadBytes": 0, - "downloadBytes": 597213184 - }, - { - "type": "intermediary", - "timeSeconds": 1.000011143, - "uploadBytes": 0, - "downloadBytes": 597262336 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001657, - "uploadBytes": 0, - "downloadBytes": 597213184 - }, - { - "type": "intermediary", - "timeSeconds": 1.000005957, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000001, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000004286, - "uploadBytes": 0, - "downloadBytes": 597213184 - }, - { - "type": "intermediary", - "timeSeconds": 1.000048287, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000019164, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000021098, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000041821, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000005241, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000064175, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000010398, - "uploadBytes": 0, - "downloadBytes": 135569408 - }, - { - "type": "intermediary", - "timeSeconds": 1.000011922, - "uploadBytes": 0, - "downloadBytes": 597180416 - }, - { - "type": "intermediary", - "timeSeconds": 1.000069864, - "uploadBytes": 0, - "downloadBytes": 597262336 - }, - { - "type": "intermediary", - "timeSeconds": 1.000007826, - "uploadBytes": 0, - "downloadBytes": 597295104 - }, - { - "type": "intermediary", - "timeSeconds": 1.000088061, - "uploadBytes": 0, - "downloadBytes": 597196800 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001821, - "uploadBytes": 0, - "downloadBytes": 597327872 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000391, - "uploadBytes": 0, - "downloadBytes": 597180416 - }, - { - "type": "intermediary", - "timeSeconds": 1.000008261, - "uploadBytes": 0, - "downloadBytes": 597147648 - }, - { - "type": "intermediary", - "timeSeconds": 1.000012566, - "uploadBytes": 0, - "downloadBytes": 597295104 - }, - { - "type": "intermediary", - "timeSeconds": 1.0001107, - "uploadBytes": 0, - "downloadBytes": 597278720 - }, - { - "type": "intermediary", - "timeSeconds": 1.000028127, - "uploadBytes": 0, - "downloadBytes": 597196800 - }, - { - "type": "intermediary", - "timeSeconds": 1.000073551, - "uploadBytes": 0, - "downloadBytes": 597295104 - }, - { - "type": "intermediary", - "timeSeconds": 1.000147812, - "uploadBytes": 0, - "downloadBytes": 597327872 - }, - { - "type": "intermediary", - "timeSeconds": 1.00009482, - "uploadBytes": 0, - "downloadBytes": 597180416 - }, - { - "type": "intermediary", - "timeSeconds": 1.000008595, - "uploadBytes": 0, - "downloadBytes": 597295104 - }, - { - "type": "intermediary", - "timeSeconds": 1.000026828, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000086203, - "uploadBytes": 0, - "downloadBytes": 597278720 - }, - { - "type": "intermediary", - "timeSeconds": 1.000126895, - "uploadBytes": 0, - "downloadBytes": 597295104 - }, - { - "type": "intermediary", - "timeSeconds": 1.000003728, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000031986, - "uploadBytes": 0, - "downloadBytes": 200663040 - }, - { - "type": "intermediary", - "timeSeconds": 1.000031378, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000039083, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000005363, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000058817, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000019633, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000008586, - "uploadBytes": 0, - "downloadBytes": 597147648 - }, - { - "type": "intermediary", - "timeSeconds": 1.000022787, - "uploadBytes": 0, - "downloadBytes": 597327872 - }, - { - "type": "intermediary", - "timeSeconds": 1.000013354, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000015993, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.0000277, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001715, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000021944, - "uploadBytes": 0, - "downloadBytes": 597213184 - }, - { - "type": "intermediary", - "timeSeconds": 1.00003402, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000123, - "uploadBytes": 0, - "downloadBytes": 597213184 - }, - { - "type": "intermediary", - "timeSeconds": 1.00002976, - "uploadBytes": 0, - "downloadBytes": 597262336 - }, - { - "type": "intermediary", - "timeSeconds": 1.000081301, - "uploadBytes": 0, - "downloadBytes": 597229568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000398, - "uploadBytes": 0, - "downloadBytes": 597245952 - }, - { - "type": "intermediary", - "timeSeconds": 1.000032451, - "uploadBytes": 0, - "downloadBytes": 597262336 - } - ], - "implementation": "https", - "version": "v0.1", - "transportStack": "tcp" - }, - { - "result": [ - { - "type": "intermediary", - "timeSeconds": 1.040670852, - "uploadBytes": 0, - "downloadBytes": 33554432 - }, - { - "type": "intermediary", - "timeSeconds": 1.025603193, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.011538215, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024458709, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.002328832, - "uploadBytes": 0, - "downloadBytes": 100663296 - }, - { - "type": "intermediary", - "timeSeconds": 1.01156147, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.010805414, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.014970739, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.011489609, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.005326186, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.048527734, - "uploadBytes": 0, - "downloadBytes": 100663296 - }, - { - "type": "intermediary", - "timeSeconds": 1.009382438, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.007209301, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.014156978, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017055401, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.011660935, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.018584072, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.014637197, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.014190884, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.042341727, - "uploadBytes": 0, - "downloadBytes": 25165824 - }, - { - "type": "intermediary", - "timeSeconds": 1.02040248, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.026328401, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.028257983, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.025763681, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.02980046, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.02747928, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.027076768, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.025843132, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.028326994, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.02044731, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.021769882, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024154229, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.022388807, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024899066, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.025064317, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.019578823, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.01956842, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024940541, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.003585591, - "uploadBytes": 0, - "downloadBytes": 33554432 - }, - { - "type": "intermediary", - "timeSeconds": 1.029481684, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.021070962, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.028839565, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.029330581, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.035478808, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.021110787, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.027295546, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.026030591, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.027526142, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.029124784, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.028328854, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.030107209, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.03171085, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.023763852, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020717174, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.025840362, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.033220081, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.032385381, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.000540491, - "uploadBytes": 0, - "downloadBytes": 14032896 - }, - { - "type": "intermediary", - "timeSeconds": 1.00905571, - "uploadBytes": 0, - "downloadBytes": 103407616 - }, - { - "type": "intermediary", - "timeSeconds": 1.027102842, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.022803898, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020596429, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024952276, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024587646, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.011992727, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020894518, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015673714, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017495806, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.018637871, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016655029, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.019525336, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017802664, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015355561, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.022463701, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.030698178, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.009729693, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024730635, - "uploadBytes": 0, - "downloadBytes": 16908288 - }, - { - "type": "intermediary", - "timeSeconds": 1.023401143, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.028901947, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.025117614, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.022899891, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.025581373, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.025245721, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.018099847, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020646435, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.019330119, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.026656927, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.026063099, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.022221694, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.023757508, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.02239706, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.028973287, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.023683433, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.022649667, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020608114, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.04885271, - "uploadBytes": 0, - "downloadBytes": 33554432 - }, - { - "type": "intermediary", - "timeSeconds": 1.018091919, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.01488779, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.019508013, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.02466463, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.018585022, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.018613831, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.013957242, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.014159515, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016876395, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016064036, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017783817, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.02127229, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.012271409, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.023657585, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.006754569, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024320762, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.025360786, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.012934617, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.056165928, - "uploadBytes": 0, - "downloadBytes": 33554432 - }, - { - "type": "intermediary", - "timeSeconds": 1.016951019, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015993336, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020765337, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.0251587, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.012138462, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016224633, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.019432823, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.02532639, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020681105, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.023337809, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.021547551, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.013280547, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.025173933, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017958616, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.029304145, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.025702438, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.014386997, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024541223, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.02577347, - "uploadBytes": 0, - "downloadBytes": 25165824 - }, - { - "type": "intermediary", - "timeSeconds": 1.01783504, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.008527722, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.00995878, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.02182952, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015081074, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015739455, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.013987979, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015543119, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017397574, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.006430124, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017561892, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.019359101, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017951818, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016427953, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.011027086, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.019211649, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.022428092, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.01262396, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.02122145, - "uploadBytes": 0, - "downloadBytes": 25165824 - }, - { - "type": "intermediary", - "timeSeconds": 1.005655452, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.014541953, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.012240397, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.001853846, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.004913686, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.008164621, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.004322337, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.01436477, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.005350239, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.008317657, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015833663, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.004051951, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.00789712, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.007497062, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.006826154, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.004443593, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.008077229, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.011185186, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.02090761, - "uploadBytes": 0, - "downloadBytes": 16777216 - }, - { - "type": "intermediary", - "timeSeconds": 1.020144182, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.012964157, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.01570117, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016992766, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.003584411, - "uploadBytes": 0, - "downloadBytes": 100663296 - }, - { - "type": "intermediary", - "timeSeconds": 1.018652135, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017769514, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015370956, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.026084662, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.026412095, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.019512777, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.025554249, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020593121, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.021319532, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.019801023, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.029364043, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.02371156, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.013131293, - "uploadBytes": 0, - "downloadBytes": 109051904 - } - ], - "implementation": "go-libp2p", - "version": "v0.27", - "transportStack": "tcp" - }, - { - "result": [ - { - "type": "intermediary", - "timeSeconds": 1.000120848, - "uploadBytes": 0, - "downloadBytes": 59571173 - }, - { - "type": "intermediary", - "timeSeconds": 1.000184945, - "uploadBytes": 0, - "downloadBytes": 124639709 - }, - { - "type": "intermediary", - "timeSeconds": 1.000005534, - "uploadBytes": 0, - "downloadBytes": 113401926 - }, - { - "type": "intermediary", - "timeSeconds": 1.004551183, - "uploadBytes": 0, - "downloadBytes": 125054227 - }, - { - "type": "intermediary", - "timeSeconds": 1.012457157, - "uploadBytes": 0, - "downloadBytes": 126475761 - }, - { - "type": "intermediary", - "timeSeconds": 1.011767116, - "uploadBytes": 0, - "downloadBytes": 126412153 - }, - { - "type": "intermediary", - "timeSeconds": 1.015148579, - "uploadBytes": 0, - "downloadBytes": 126683908 - }, - { - "type": "intermediary", - "timeSeconds": 1.013240956, - "uploadBytes": 0, - "downloadBytes": 126452525 - }, - { - "type": "intermediary", - "timeSeconds": 1.012387186, - "uploadBytes": 0, - "downloadBytes": 126523485 - }, - { - "type": "intermediary", - "timeSeconds": 1.013202645, - "uploadBytes": 0, - "downloadBytes": 126477394 - }, - { - "type": "intermediary", - "timeSeconds": 1.012952284, - "uploadBytes": 0, - "downloadBytes": 126542986 - }, - { - "type": "intermediary", - "timeSeconds": 1.013995279, - "uploadBytes": 0, - "downloadBytes": 126608833 - }, - { - "type": "intermediary", - "timeSeconds": 1.013820133, - "uploadBytes": 0, - "downloadBytes": 126622573 - }, - { - "type": "intermediary", - "timeSeconds": 1.013174111, - "uploadBytes": 0, - "downloadBytes": 126505033 - }, - { - "type": "intermediary", - "timeSeconds": 1.013329461, - "uploadBytes": 0, - "downloadBytes": 126689759 - }, - { - "type": "intermediary", - "timeSeconds": 1.013349602, - "uploadBytes": 0, - "downloadBytes": 126573674 - }, - { - "type": "intermediary", - "timeSeconds": 1.013847175, - "uploadBytes": 0, - "downloadBytes": 126614390 - }, - { - "type": "intermediary", - "timeSeconds": 1.012409279, - "uploadBytes": 0, - "downloadBytes": 126463390 - }, - { - "type": "intermediary", - "timeSeconds": 1.013915117, - "uploadBytes": 0, - "downloadBytes": 126602898 - }, - { - "type": "intermediary", - "timeSeconds": 1.003343421, - "uploadBytes": 0, - "downloadBytes": 58334210 - }, - { - "type": "intermediary", - "timeSeconds": 1.003862162, - "uploadBytes": 0, - "downloadBytes": 123715394 - }, - { - "type": "intermediary", - "timeSeconds": 1.000021913, - "uploadBytes": 0, - "downloadBytes": 124960232 - }, - { - "type": "intermediary", - "timeSeconds": 1.000171974, - "uploadBytes": 0, - "downloadBytes": 124187900 - }, - { - "type": "intermediary", - "timeSeconds": 1.000070344, - "uploadBytes": 0, - "downloadBytes": 122459994 - }, - { - "type": "intermediary", - "timeSeconds": 1.00011742, - "uploadBytes": 0, - "downloadBytes": 125080758 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000545, - "uploadBytes": 0, - "downloadBytes": 124599169 - }, - { - "type": "intermediary", - "timeSeconds": 1.000037839, - "uploadBytes": 0, - "downloadBytes": 121988829 - }, - { - "type": "intermediary", - "timeSeconds": 1.000090434, - "uploadBytes": 0, - "downloadBytes": 124301367 - }, - { - "type": "intermediary", - "timeSeconds": 1.015358263, - "uploadBytes": 0, - "downloadBytes": 125320995 - }, - { - "type": "intermediary", - "timeSeconds": 1.000023938, - "uploadBytes": 0, - "downloadBytes": 125462618 - }, - { - "type": "intermediary", - "timeSeconds": 1.000729856, - "uploadBytes": 0, - "downloadBytes": 122132625 - }, - { - "type": "intermediary", - "timeSeconds": 1.000024219, - "uploadBytes": 0, - "downloadBytes": 124052383 - }, - { - "type": "intermediary", - "timeSeconds": 1.000123975, - "uploadBytes": 0, - "downloadBytes": 125614762 - }, - { - "type": "intermediary", - "timeSeconds": 1.000009714, - "uploadBytes": 0, - "downloadBytes": 122282002 - }, - { - "type": "intermediary", - "timeSeconds": 1.000005609, - "uploadBytes": 0, - "downloadBytes": 123524112 - }, - { - "type": "intermediary", - "timeSeconds": 1.019077831, - "uploadBytes": 0, - "downloadBytes": 125923627 - }, - { - "type": "intermediary", - "timeSeconds": 1.000115947, - "uploadBytes": 0, - "downloadBytes": 126276935 - }, - { - "type": "intermediary", - "timeSeconds": 1.00004918, - "uploadBytes": 0, - "downloadBytes": 122674956 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001293, - "uploadBytes": 0, - "downloadBytes": 58005164 - }, - { - "type": "intermediary", - "timeSeconds": 1.011880724, - "uploadBytes": 0, - "downloadBytes": 124186319 - }, - { - "type": "intermediary", - "timeSeconds": 1.000038239, - "uploadBytes": 0, - "downloadBytes": 109011487 - }, - { - "type": "intermediary", - "timeSeconds": 1.000230441, - "uploadBytes": 0, - "downloadBytes": 107490320 - }, - { - "type": "intermediary", - "timeSeconds": 1.00002342, - "uploadBytes": 0, - "downloadBytes": 109874262 - }, - { - "type": "intermediary", - "timeSeconds": 1.00022362, - "uploadBytes": 0, - "downloadBytes": 108119615 - }, - { - "type": "intermediary", - "timeSeconds": 1.000168468, - "uploadBytes": 0, - "downloadBytes": 108574831 - }, - { - "type": "intermediary", - "timeSeconds": 1.000057316, - "uploadBytes": 0, - "downloadBytes": 110083819 - }, - { - "type": "intermediary", - "timeSeconds": 1.000083198, - "uploadBytes": 0, - "downloadBytes": 108984699 - }, - { - "type": "intermediary", - "timeSeconds": 1.000027078, - "uploadBytes": 0, - "downloadBytes": 109309818 - }, - { - "type": "intermediary", - "timeSeconds": 1.000033964, - "uploadBytes": 0, - "downloadBytes": 110185672 - }, - { - "type": "intermediary", - "timeSeconds": 1.000266678, - "uploadBytes": 0, - "downloadBytes": 109216720 - }, - { - "type": "intermediary", - "timeSeconds": 1.000126914, - "uploadBytes": 0, - "downloadBytes": 110026752 - }, - { - "type": "intermediary", - "timeSeconds": 1.000167639, - "uploadBytes": 0, - "downloadBytes": 110080552 - }, - { - "type": "intermediary", - "timeSeconds": 1.000047927, - "uploadBytes": 0, - "downloadBytes": 109623694 - }, - { - "type": "intermediary", - "timeSeconds": 1.000102003, - "uploadBytes": 0, - "downloadBytes": 110885262 - }, - { - "type": "intermediary", - "timeSeconds": 1.000018164, - "uploadBytes": 0, - "downloadBytes": 110697334 - }, - { - "type": "intermediary", - "timeSeconds": 1.000037956, - "uploadBytes": 0, - "downloadBytes": 110159221 - }, - { - "type": "intermediary", - "timeSeconds": 1.000111437, - "uploadBytes": 0, - "downloadBytes": 111554691 - }, - { - "type": "intermediary", - "timeSeconds": 1.000041137, - "uploadBytes": 0, - "downloadBytes": 58671150 - }, - { - "type": "intermediary", - "timeSeconds": 1.000023009, - "uploadBytes": 0, - "downloadBytes": 124434080 - }, - { - "type": "intermediary", - "timeSeconds": 1.009437117, - "uploadBytes": 0, - "downloadBytes": 125574961 - }, - { - "type": "intermediary", - "timeSeconds": 1.01415957, - "uploadBytes": 0, - "downloadBytes": 126673353 - }, - { - "type": "intermediary", - "timeSeconds": 1.000086581, - "uploadBytes": 0, - "downloadBytes": 111806986 - }, - { - "type": "intermediary", - "timeSeconds": 1.000492744, - "uploadBytes": 0, - "downloadBytes": 109538122 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000458, - "uploadBytes": 0, - "downloadBytes": 109559540 - }, - { - "type": "intermediary", - "timeSeconds": 1.000140889, - "uploadBytes": 0, - "downloadBytes": 109910654 - }, - { - "type": "intermediary", - "timeSeconds": 1.000404047, - "uploadBytes": 0, - "downloadBytes": 110392225 - }, - { - "type": "intermediary", - "timeSeconds": 1.000076448, - "uploadBytes": 0, - "downloadBytes": 110655051 - }, - { - "type": "intermediary", - "timeSeconds": 1.000332941, - "uploadBytes": 0, - "downloadBytes": 110010426 - }, - { - "type": "intermediary", - "timeSeconds": 1.000044314, - "uploadBytes": 0, - "downloadBytes": 110407070 - }, - { - "type": "intermediary", - "timeSeconds": 1.000082616, - "uploadBytes": 0, - "downloadBytes": 110502123 - }, - { - "type": "intermediary", - "timeSeconds": 1.000007375, - "uploadBytes": 0, - "downloadBytes": 111053759 - }, - { - "type": "intermediary", - "timeSeconds": 1.000081854, - "uploadBytes": 0, - "downloadBytes": 111334962 - }, - { - "type": "intermediary", - "timeSeconds": 1.000008355, - "uploadBytes": 0, - "downloadBytes": 110874258 - }, - { - "type": "intermediary", - "timeSeconds": 1.000012416, - "uploadBytes": 0, - "downloadBytes": 110865822 - }, - { - "type": "intermediary", - "timeSeconds": 1.000103327, - "uploadBytes": 0, - "downloadBytes": 111871358 - }, - { - "type": "intermediary", - "timeSeconds": 1.000065733, - "uploadBytes": 0, - "downloadBytes": 111938544 - }, - { - "type": "intermediary", - "timeSeconds": 1.000117377, - "uploadBytes": 0, - "downloadBytes": 61110112 - }, - { - "type": "intermediary", - "timeSeconds": 1.000095815, - "uploadBytes": 0, - "downloadBytes": 127237998 - }, - { - "type": "intermediary", - "timeSeconds": 1.019473551, - "uploadBytes": 0, - "downloadBytes": 126825526 - }, - { - "type": "intermediary", - "timeSeconds": 1.000089294, - "uploadBytes": 0, - "downloadBytes": 126571166 - }, - { - "type": "intermediary", - "timeSeconds": 1.015063068, - "uploadBytes": 0, - "downloadBytes": 121553770 - }, - { - "type": "intermediary", - "timeSeconds": 1.000259953, - "uploadBytes": 0, - "downloadBytes": 112058368 - }, - { - "type": "intermediary", - "timeSeconds": 1.000034787, - "uploadBytes": 0, - "downloadBytes": 111530048 - }, - { - "type": "intermediary", - "timeSeconds": 1.000029633, - "uploadBytes": 0, - "downloadBytes": 111422480 - }, - { - "type": "intermediary", - "timeSeconds": 1.000081319, - "uploadBytes": 0, - "downloadBytes": 111755066 - }, - { - "type": "intermediary", - "timeSeconds": 1.000225062, - "uploadBytes": 0, - "downloadBytes": 111752896 - }, - { - "type": "intermediary", - "timeSeconds": 1.000283852, - "uploadBytes": 0, - "downloadBytes": 111770907 - }, - { - "type": "intermediary", - "timeSeconds": 1.000143559, - "uploadBytes": 0, - "downloadBytes": 111837925 - }, - { - "type": "intermediary", - "timeSeconds": 1.000090919, - "uploadBytes": 0, - "downloadBytes": 112109600 - }, - { - "type": "intermediary", - "timeSeconds": 1.000153518, - "uploadBytes": 0, - "downloadBytes": 112416736 - }, - { - "type": "intermediary", - "timeSeconds": 1.000147529, - "uploadBytes": 0, - "downloadBytes": 112448528 - }, - { - "type": "intermediary", - "timeSeconds": 1.000146843, - "uploadBytes": 0, - "downloadBytes": 112720758 - }, - { - "type": "intermediary", - "timeSeconds": 1.000068719, - "uploadBytes": 0, - "downloadBytes": 112926720 - }, - { - "type": "intermediary", - "timeSeconds": 1.000326589, - "uploadBytes": 0, - "downloadBytes": 112865890 - }, - { - "type": "intermediary", - "timeSeconds": 1.000003959, - "uploadBytes": 0, - "downloadBytes": 113052403 - }, - { - "type": "intermediary", - "timeSeconds": 1.000096096, - "uploadBytes": 0, - "downloadBytes": 56896186 - }, - { - "type": "intermediary", - "timeSeconds": 1.00576447, - "uploadBytes": 0, - "downloadBytes": 125762248 - }, - { - "type": "intermediary", - "timeSeconds": 1.00009467, - "uploadBytes": 0, - "downloadBytes": 113451276 - }, - { - "type": "intermediary", - "timeSeconds": 1.000016248, - "uploadBytes": 0, - "downloadBytes": 124416938 - }, - { - "type": "intermediary", - "timeSeconds": 1.002991471, - "uploadBytes": 0, - "downloadBytes": 124565865 - }, - { - "type": "intermediary", - "timeSeconds": 1.009777307, - "uploadBytes": 0, - "downloadBytes": 126470380 - }, - { - "type": "intermediary", - "timeSeconds": 1.010189288, - "uploadBytes": 0, - "downloadBytes": 126688138 - }, - { - "type": "intermediary", - "timeSeconds": 1.009151763, - "uploadBytes": 0, - "downloadBytes": 126451115 - }, - { - "type": "intermediary", - "timeSeconds": 1.008817009, - "uploadBytes": 0, - "downloadBytes": 126446410 - }, - { - "type": "intermediary", - "timeSeconds": 1.010625872, - "uploadBytes": 0, - "downloadBytes": 126592407 - }, - { - "type": "intermediary", - "timeSeconds": 1.010380609, - "uploadBytes": 0, - "downloadBytes": 126503383 - }, - { - "type": "intermediary", - "timeSeconds": 1.010027119, - "uploadBytes": 0, - "downloadBytes": 126621411 - }, - { - "type": "intermediary", - "timeSeconds": 1.009471992, - "uploadBytes": 0, - "downloadBytes": 126481668 - }, - { - "type": "intermediary", - "timeSeconds": 1.009323196, - "uploadBytes": 0, - "downloadBytes": 126487292 - }, - { - "type": "intermediary", - "timeSeconds": 1.010230946, - "uploadBytes": 0, - "downloadBytes": 126502523 - }, - { - "type": "intermediary", - "timeSeconds": 1.009887947, - "uploadBytes": 0, - "downloadBytes": 126515110 - }, - { - "type": "intermediary", - "timeSeconds": 1.008049903, - "uploadBytes": 0, - "downloadBytes": 126361835 - }, - { - "type": "intermediary", - "timeSeconds": 1.010005342, - "uploadBytes": 0, - "downloadBytes": 126420350 - }, - { - "type": "intermediary", - "timeSeconds": 1.010266984, - "uploadBytes": 0, - "downloadBytes": 126518224 - }, - { - "type": "intermediary", - "timeSeconds": 1.000069254, - "uploadBytes": 0, - "downloadBytes": 57897075 - }, - { - "type": "intermediary", - "timeSeconds": 1.013476025, - "uploadBytes": 0, - "downloadBytes": 124446630 - }, - { - "type": "intermediary", - "timeSeconds": 1.000058688, - "uploadBytes": 0, - "downloadBytes": 124962115 - }, - { - "type": "intermediary", - "timeSeconds": 1.000057415, - "uploadBytes": 0, - "downloadBytes": 123994788 - }, - { - "type": "intermediary", - "timeSeconds": 1.004310184, - "uploadBytes": 0, - "downloadBytes": 122590390 - }, - { - "type": "intermediary", - "timeSeconds": 1.000035734, - "uploadBytes": 0, - "downloadBytes": 124908796 - }, - { - "type": "intermediary", - "timeSeconds": 1.000053148, - "uploadBytes": 0, - "downloadBytes": 124068108 - }, - { - "type": "intermediary", - "timeSeconds": 1.002023306, - "uploadBytes": 0, - "downloadBytes": 122269017 - }, - { - "type": "intermediary", - "timeSeconds": 1.000011189, - "uploadBytes": 0, - "downloadBytes": 124596635 - }, - { - "type": "intermediary", - "timeSeconds": 1.000018936, - "uploadBytes": 0, - "downloadBytes": 124267404 - }, - { - "type": "intermediary", - "timeSeconds": 1.003898024, - "uploadBytes": 0, - "downloadBytes": 122620894 - }, - { - "type": "intermediary", - "timeSeconds": 1.000013284, - "uploadBytes": 0, - "downloadBytes": 124794366 - }, - { - "type": "intermediary", - "timeSeconds": 1.000018053, - "uploadBytes": 0, - "downloadBytes": 124427568 - }, - { - "type": "intermediary", - "timeSeconds": 1.00166103, - "uploadBytes": 0, - "downloadBytes": 121990305 - }, - { - "type": "intermediary", - "timeSeconds": 1.000119514, - "uploadBytes": 0, - "downloadBytes": 124728833 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001882, - "uploadBytes": 0, - "downloadBytes": 124298436 - }, - { - "type": "intermediary", - "timeSeconds": 1.003411258, - "uploadBytes": 0, - "downloadBytes": 122388910 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000368, - "uploadBytes": 0, - "downloadBytes": 124970122 - }, - { - "type": "intermediary", - "timeSeconds": 1.000018643, - "uploadBytes": 0, - "downloadBytes": 123390228 - }, - { - "type": "intermediary", - "timeSeconds": 1.000008738, - "uploadBytes": 0, - "downloadBytes": 60267355 - }, - { - "type": "intermediary", - "timeSeconds": 1.000109639, - "uploadBytes": 0, - "downloadBytes": 125013929 - }, - { - "type": "intermediary", - "timeSeconds": 1.000044673, - "uploadBytes": 0, - "downloadBytes": 121834244 - }, - { - "type": "intermediary", - "timeSeconds": 1.000866482, - "uploadBytes": 0, - "downloadBytes": 124816044 - }, - { - "type": "intermediary", - "timeSeconds": 1.000062379, - "uploadBytes": 0, - "downloadBytes": 124697838 - }, - { - "type": "intermediary", - "timeSeconds": 1.000008998, - "uploadBytes": 0, - "downloadBytes": 124695268 - }, - { - "type": "intermediary", - "timeSeconds": 1.000615857, - "uploadBytes": 0, - "downloadBytes": 124793493 - }, - { - "type": "intermediary", - "timeSeconds": 1.009655569, - "uploadBytes": 0, - "downloadBytes": 126540146 - }, - { - "type": "intermediary", - "timeSeconds": 1.008711637, - "uploadBytes": 0, - "downloadBytes": 126492681 - }, - { - "type": "intermediary", - "timeSeconds": 1.008754184, - "uploadBytes": 0, - "downloadBytes": 126448426 - }, - { - "type": "intermediary", - "timeSeconds": 1.008742736, - "uploadBytes": 0, - "downloadBytes": 126416367 - }, - { - "type": "intermediary", - "timeSeconds": 1.009096558, - "uploadBytes": 0, - "downloadBytes": 126530332 - }, - { - "type": "intermediary", - "timeSeconds": 1.00908117, - "uploadBytes": 0, - "downloadBytes": 126582345 - }, - { - "type": "intermediary", - "timeSeconds": 1.009647968, - "uploadBytes": 0, - "downloadBytes": 126432232 - }, - { - "type": "intermediary", - "timeSeconds": 1.008454608, - "uploadBytes": 0, - "downloadBytes": 126451282 - }, - { - "type": "intermediary", - "timeSeconds": 1.009474181, - "uploadBytes": 0, - "downloadBytes": 126552828 - }, - { - "type": "intermediary", - "timeSeconds": 1.009064452, - "uploadBytes": 0, - "downloadBytes": 126427380 - }, - { - "type": "intermediary", - "timeSeconds": 1.008358094, - "uploadBytes": 0, - "downloadBytes": 126359258 - }, - { - "type": "intermediary", - "timeSeconds": 1.010563845, - "uploadBytes": 0, - "downloadBytes": 126675473 - }, - { - "type": "intermediary", - "timeSeconds": 1.000008995, - "uploadBytes": 0, - "downloadBytes": 60290650 - }, - { - "type": "intermediary", - "timeSeconds": 1.000077346, - "uploadBytes": 0, - "downloadBytes": 125047034 - }, - { - "type": "intermediary", - "timeSeconds": 1.000125178, - "uploadBytes": 0, - "downloadBytes": 125461960 - }, - { - "type": "intermediary", - "timeSeconds": 1.000056696, - "uploadBytes": 0, - "downloadBytes": 124841850 - }, - { - "type": "intermediary", - "timeSeconds": 1.004915102, - "uploadBytes": 0, - "downloadBytes": 125927354 - }, - { - "type": "intermediary", - "timeSeconds": 1.010021508, - "uploadBytes": 0, - "downloadBytes": 126788181 - }, - { - "type": "intermediary", - "timeSeconds": 1.008304012, - "uploadBytes": 0, - "downloadBytes": 126657118 - }, - { - "type": "intermediary", - "timeSeconds": 1.008229957, - "uploadBytes": 0, - "downloadBytes": 126547671 - }, - { - "type": "intermediary", - "timeSeconds": 1.007715422, - "uploadBytes": 0, - "downloadBytes": 126476279 - }, - { - "type": "intermediary", - "timeSeconds": 1.007716978, - "uploadBytes": 0, - "downloadBytes": 126524293 - }, - { - "type": "intermediary", - "timeSeconds": 1.008637233, - "uploadBytes": 0, - "downloadBytes": 126631018 - }, - { - "type": "intermediary", - "timeSeconds": 1.007280289, - "uploadBytes": 0, - "downloadBytes": 126437213 - }, - { - "type": "intermediary", - "timeSeconds": 1.009650344, - "uploadBytes": 0, - "downloadBytes": 126609937 - }, - { - "type": "intermediary", - "timeSeconds": 1.008955922, - "uploadBytes": 0, - "downloadBytes": 126562359 - }, - { - "type": "intermediary", - "timeSeconds": 1.00800101, - "uploadBytes": 0, - "downloadBytes": 126669849 - }, - { - "type": "intermediary", - "timeSeconds": 1.006857242, - "uploadBytes": 0, - "downloadBytes": 126368630 - }, - { - "type": "intermediary", - "timeSeconds": 1.008452822, - "uploadBytes": 0, - "downloadBytes": 126557046 - }, - { - "type": "intermediary", - "timeSeconds": 1.008517454, - "uploadBytes": 0, - "downloadBytes": 126649531 - }, - { - "type": "intermediary", - "timeSeconds": 1.00763708, - "uploadBytes": 0, - "downloadBytes": 126362713 - }, - { - "type": "intermediary", - "timeSeconds": 1.00073619, - "uploadBytes": 0, - "downloadBytes": 61182242 - }, - { - "type": "intermediary", - "timeSeconds": 1.000049027, - "uploadBytes": 0, - "downloadBytes": 127528064 - }, - { - "type": "intermediary", - "timeSeconds": 1.000021959, - "uploadBytes": 0, - "downloadBytes": 127155350 - }, - { - "type": "intermediary", - "timeSeconds": 1.000043091, - "uploadBytes": 0, - "downloadBytes": 126572567 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001163, - "uploadBytes": 0, - "downloadBytes": 127128837 - }, - { - "type": "intermediary", - "timeSeconds": 1.018244823, - "uploadBytes": 0, - "downloadBytes": 126884012 - }, - { - "type": "intermediary", - "timeSeconds": 1.00011048, - "uploadBytes": 0, - "downloadBytes": 126875333 - }, - { - "type": "intermediary", - "timeSeconds": 1.000016573, - "uploadBytes": 0, - "downloadBytes": 127142669 - }, - { - "type": "intermediary", - "timeSeconds": 1.000062813, - "uploadBytes": 0, - "downloadBytes": 127023524 - }, - { - "type": "intermediary", - "timeSeconds": 1.000025038, - "uploadBytes": 0, - "downloadBytes": 127103830 - }, - { - "type": "intermediary", - "timeSeconds": 1.000038297, - "uploadBytes": 0, - "downloadBytes": 126731158 - }, - { - "type": "intermediary", - "timeSeconds": 1.000502925, - "uploadBytes": 0, - "downloadBytes": 127038529 - }, - { - "type": "intermediary", - "timeSeconds": 1.00000278, - "uploadBytes": 0, - "downloadBytes": 126361112 - }, - { - "type": "intermediary", - "timeSeconds": 1.000067352, - "uploadBytes": 0, - "downloadBytes": 127232041 - }, - { - "type": "intermediary", - "timeSeconds": 1.000125638, - "uploadBytes": 0, - "downloadBytes": 127378628 - }, - { - "type": "intermediary", - "timeSeconds": 1.008631512, - "uploadBytes": 0, - "downloadBytes": 114927648 - }, - { - "type": "intermediary", - "timeSeconds": 1.000096166, - "uploadBytes": 0, - "downloadBytes": 126802318 - }, - { - "type": "intermediary", - "timeSeconds": 1.000100814, - "uploadBytes": 0, - "downloadBytes": 126983460 - }, - { - "type": "intermediary", - "timeSeconds": 1.000044176, - "uploadBytes": 0, - "downloadBytes": 126962916 - } - ], - "implementation": "go-libp2p", - "version": "v0.27", - "transportStack": "quic-v1" - }, - { - "result": [ - { - "type": "intermediary", - "timeSeconds": 1.018832286, - "uploadBytes": 0, - "downloadBytes": 14426112 - }, - { - "type": "intermediary", - "timeSeconds": 1.002008519, - "uploadBytes": 0, - "downloadBytes": 103014400 - }, - { - "type": "intermediary", - "timeSeconds": 1.019041653, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.023050333, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.02103033, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.032037174, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.013462183, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.023395881, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.022929132, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016406609, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024053353, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.022127902, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017435922, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.014764379, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.022345831, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024454094, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.018334741, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.018635256, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015807185, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.000040337, - "uploadBytes": 0, - "downloadBytes": 32841728 - }, - { - "type": "intermediary", - "timeSeconds": 1.00137918, - "uploadBytes": 0, - "downloadBytes": 101376000 - }, - { - "type": "intermediary", - "timeSeconds": 1.015045563, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.023974372, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.021586782, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020896917, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.0215800800000001, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016144192, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015215035, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.02309791, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.021700876, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015125351, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.019169877, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.013867834, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.01440786, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.0156567, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020692336, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.018421961, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016480564, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.000105907, - "uploadBytes": 0, - "downloadBytes": 40902656 - }, - { - "type": "intermediary", - "timeSeconds": 1.000012755, - "uploadBytes": 0, - "downloadBytes": 109707264 - }, - { - "type": "intermediary", - "timeSeconds": 1.000026501, - "uploadBytes": 0, - "downloadBytes": 103022592 - }, - { - "type": "intermediary", - "timeSeconds": 1.010198337, - "uploadBytes": 0, - "downloadBytes": 107077632 - }, - { - "type": "intermediary", - "timeSeconds": 1.006885417, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.040529329, - "uploadBytes": 0, - "downloadBytes": 100663296 - }, - { - "type": "intermediary", - "timeSeconds": 1.001323144, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.012135981, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.00523708, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.007620742, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.009949929, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.005371577, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.009613761, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.000014296, - "uploadBytes": 0, - "downloadBytes": 109584384 - }, - { - "type": "intermediary", - "timeSeconds": 1.006945803, - "uploadBytes": 0, - "downloadBytes": 108519424 - }, - { - "type": "intermediary", - "timeSeconds": 1.011532959, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.010366034, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.014034302, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.013534208, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.000152276, - "uploadBytes": 0, - "downloadBytes": 34545664 - }, - { - "type": "intermediary", - "timeSeconds": 1.019978526, - "uploadBytes": 0, - "downloadBytes": 108060672 - }, - { - "type": "intermediary", - "timeSeconds": 1.018858857, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.022927313, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.030259403, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.027978049, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.02428624, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.021502059, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.026113907, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.023665976, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.025744867, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.02139804, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.027576124, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.021144789, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.021383976, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.021658314, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.025674218, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.026837478, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.028424498, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020758029, - "uploadBytes": 0, - "downloadBytes": 3874816 - }, - { - "type": "intermediary", - "timeSeconds": 1.030941371, - "uploadBytes": 0, - "downloadBytes": 88530944 - }, - { - "type": "intermediary", - "timeSeconds": 1.020110597, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024005499, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.030788295, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.028071053, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.026682961, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.022622998, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016697925, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017325682, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020546691, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.027692812, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.030647882, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.019345747, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024912403, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.031562484, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.022335838, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.023843997, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.023140145, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.031086936, - "uploadBytes": 0, - "downloadBytes": 25296896 - }, - { - "type": "intermediary", - "timeSeconds": 1.000035741, - "uploadBytes": 0, - "downloadBytes": 109191168 - }, - { - "type": "intermediary", - "timeSeconds": 1.004586116, - "uploadBytes": 0, - "downloadBytes": 108912640 - }, - { - "type": "intermediary", - "timeSeconds": 1.014786491, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.007077529, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.013439993, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.010213212, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.012221083, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.005933973, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.011439084, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.010286697, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.009391776, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.011025985, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.009793591, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.009860115, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.008867857, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.010354547, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.021990382, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.013517724, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.035303836, - "uploadBytes": 0, - "downloadBytes": 25165824 - }, - { - "type": "intermediary", - "timeSeconds": 1.022311529, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016645271, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.019418287, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.023846699, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016669068, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020349376, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.019050752, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016146697, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017341421, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015158439, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.01168574, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.01987688, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.019601293, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.021902326, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.01918628, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016119293, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.01702298, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017672946, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.046987973, - "uploadBytes": 0, - "downloadBytes": 33554432 - }, - { - "type": "intermediary", - "timeSeconds": 1.000011933, - "uploadBytes": 0, - "downloadBytes": 111288320 - }, - { - "type": "intermediary", - "timeSeconds": 1.003048772, - "uploadBytes": 0, - "downloadBytes": 106815488 - }, - { - "type": "intermediary", - "timeSeconds": 1.020405998, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.018485267, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.01681466, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.012020668, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017764532, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.012219304, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.013190174, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.011564867, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016133844, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017167156, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.018585712, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.019191232, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.0177145969999999, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.011688362, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.01608556, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.008631871, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.025484114, - "uploadBytes": 0, - "downloadBytes": 25165824 - }, - { - "type": "intermediary", - "timeSeconds": 1.017339077, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016585453, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016474295, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.01591885, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.009446815, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.022631843, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.006621961, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.005357724, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.019353132, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016106488, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.012213956, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020573039, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016272987, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.023758413, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020406066, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.013994231, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.014322307, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.019663795, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.004880012, - "uploadBytes": 0, - "downloadBytes": 41943040 - }, - { - "type": "intermediary", - "timeSeconds": 1.0120538, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.007476214, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.003628374, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.014642363, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.007642985, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.013430394, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.014489882, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.012156547, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015938925, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.010986074, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.012150581, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020323195, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.014435858, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.002832583, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.01626981, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.023111125, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.014611751, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.007653064, - "uploadBytes": 0, - "downloadBytes": 109051904 - } - ], - "implementation": "go-libp2p", - "version": "v0.28", - "transportStack": "tcp" - }, - { - "result": [ - { - "type": "intermediary", - "timeSeconds": 1.000012806, - "uploadBytes": 0, - "downloadBytes": 60239895 - }, - { - "type": "intermediary", - "timeSeconds": 1.000103535, - "uploadBytes": 0, - "downloadBytes": 124758829 - }, - { - "type": "intermediary", - "timeSeconds": 1.000021343, - "uploadBytes": 0, - "downloadBytes": 125032818 - }, - { - "type": "intermediary", - "timeSeconds": 1.002694899, - "uploadBytes": 0, - "downloadBytes": 125047177 - }, - { - "type": "intermediary", - "timeSeconds": 1.009309819, - "uploadBytes": 0, - "downloadBytes": 126463330 - }, - { - "type": "intermediary", - "timeSeconds": 1.009071339, - "uploadBytes": 0, - "downloadBytes": 126534506 - }, - { - "type": "intermediary", - "timeSeconds": 1.008244694, - "uploadBytes": 0, - "downloadBytes": 126442914 - }, - { - "type": "intermediary", - "timeSeconds": 1.010272234, - "uploadBytes": 0, - "downloadBytes": 126643027 - }, - { - "type": "intermediary", - "timeSeconds": 1.007789321, - "uploadBytes": 0, - "downloadBytes": 126351304 - }, - { - "type": "intermediary", - "timeSeconds": 1.008439667, - "uploadBytes": 0, - "downloadBytes": 126411508 - }, - { - "type": "intermediary", - "timeSeconds": 1.008992649, - "uploadBytes": 0, - "downloadBytes": 126465031 - }, - { - "type": "intermediary", - "timeSeconds": 1.009544494, - "uploadBytes": 0, - "downloadBytes": 126531738 - }, - { - "type": "intermediary", - "timeSeconds": 1.008121444, - "uploadBytes": 0, - "downloadBytes": 126328628 - }, - { - "type": "intermediary", - "timeSeconds": 1.008534731, - "uploadBytes": 0, - "downloadBytes": 126424577 - }, - { - "type": "intermediary", - "timeSeconds": 1.008907447, - "uploadBytes": 0, - "downloadBytes": 126359910 - }, - { - "type": "intermediary", - "timeSeconds": 1.00002594, - "uploadBytes": 0, - "downloadBytes": 85711792 - }, - { - "type": "intermediary", - "timeSeconds": 1.000023761, - "uploadBytes": 0, - "downloadBytes": 76718510 - }, - { - "type": "intermediary", - "timeSeconds": 1.000190305, - "uploadBytes": 0, - "downloadBytes": 76845852 - }, - { - "type": "intermediary", - "timeSeconds": 1.000064378, - "uploadBytes": 0, - "downloadBytes": 77667190 - }, - { - "type": "intermediary", - "timeSeconds": 1.000099582, - "uploadBytes": 0, - "downloadBytes": 58370930 - }, - { - "type": "intermediary", - "timeSeconds": 1.008389393, - "uploadBytes": 0, - "downloadBytes": 123854132 - }, - { - "type": "intermediary", - "timeSeconds": 1.000033376, - "uploadBytes": 0, - "downloadBytes": 125518360 - }, - { - "type": "intermediary", - "timeSeconds": 1.000733424, - "uploadBytes": 0, - "downloadBytes": 123568466 - }, - { - "type": "intermediary", - "timeSeconds": 1.000025354, - "uploadBytes": 0, - "downloadBytes": 123245750 - }, - { - "type": "intermediary", - "timeSeconds": 1.016506108, - "uploadBytes": 0, - "downloadBytes": 125576837 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001071, - "uploadBytes": 0, - "downloadBytes": 125559935 - }, - { - "type": "intermediary", - "timeSeconds": 1.00001772, - "uploadBytes": 0, - "downloadBytes": 123450084 - }, - { - "type": "intermediary", - "timeSeconds": 1.000421066, - "uploadBytes": 0, - "downloadBytes": 122623487 - }, - { - "type": "intermediary", - "timeSeconds": 1.000147484, - "uploadBytes": 0, - "downloadBytes": 125339337 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001774, - "uploadBytes": 0, - "downloadBytes": 124270316 - }, - { - "type": "intermediary", - "timeSeconds": 1.000081028, - "uploadBytes": 0, - "downloadBytes": 122301424 - }, - { - "type": "intermediary", - "timeSeconds": 1.000014116, - "uploadBytes": 0, - "downloadBytes": 125226642 - }, - { - "type": "intermediary", - "timeSeconds": 1.000084268, - "uploadBytes": 0, - "downloadBytes": 124257662 - }, - { - "type": "intermediary", - "timeSeconds": 1.000053535, - "uploadBytes": 0, - "downloadBytes": 122210580 - }, - { - "type": "intermediary", - "timeSeconds": 1.000012659, - "uploadBytes": 0, - "downloadBytes": 101698349 - }, - { - "type": "intermediary", - "timeSeconds": 1.000084323, - "uploadBytes": 0, - "downloadBytes": 107668627 - }, - { - "type": "intermediary", - "timeSeconds": 1.000195356, - "uploadBytes": 0, - "downloadBytes": 109660866 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000767, - "uploadBytes": 0, - "downloadBytes": 108283994 - }, - { - "type": "intermediary", - "timeSeconds": 1.00184739, - "uploadBytes": 0, - "downloadBytes": 55776621 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001048, - "uploadBytes": 0, - "downloadBytes": 123761726 - }, - { - "type": "intermediary", - "timeSeconds": 1.008877798, - "uploadBytes": 0, - "downloadBytes": 121262748 - }, - { - "type": "intermediary", - "timeSeconds": 1.002826022, - "uploadBytes": 0, - "downloadBytes": 123683093 - }, - { - "type": "intermediary", - "timeSeconds": 1.003401822, - "uploadBytes": 0, - "downloadBytes": 121176740 - }, - { - "type": "intermediary", - "timeSeconds": 1.003996333, - "uploadBytes": 0, - "downloadBytes": 123814674 - }, - { - "type": "intermediary", - "timeSeconds": 1.003635625, - "uploadBytes": 0, - "downloadBytes": 121202604 - }, - { - "type": "intermediary", - "timeSeconds": 1.001299653, - "uploadBytes": 0, - "downloadBytes": 123749823 - }, - { - "type": "intermediary", - "timeSeconds": 1.006369251, - "uploadBytes": 0, - "downloadBytes": 121092923 - }, - { - "type": "intermediary", - "timeSeconds": 1.000013979, - "uploadBytes": 0, - "downloadBytes": 123996794 - }, - { - "type": "intermediary", - "timeSeconds": 1.009880876, - "uploadBytes": 0, - "downloadBytes": 120942891 - }, - { - "type": "intermediary", - "timeSeconds": 1.000006993, - "uploadBytes": 0, - "downloadBytes": 101176345 - }, - { - "type": "intermediary", - "timeSeconds": 1.000256845, - "uploadBytes": 0, - "downloadBytes": 107483014 - }, - { - "type": "intermediary", - "timeSeconds": 1.000247977, - "uploadBytes": 0, - "downloadBytes": 106182380 - }, - { - "type": "intermediary", - "timeSeconds": 1.00003599, - "uploadBytes": 0, - "downloadBytes": 107678460 - }, - { - "type": "intermediary", - "timeSeconds": 1.000042379, - "uploadBytes": 0, - "downloadBytes": 106663628 - }, - { - "type": "intermediary", - "timeSeconds": 1.000234918, - "uploadBytes": 0, - "downloadBytes": 108305691 - }, - { - "type": "intermediary", - "timeSeconds": 1.000266755, - "uploadBytes": 0, - "downloadBytes": 106820877 - }, - { - "type": "intermediary", - "timeSeconds": 1.000040322, - "uploadBytes": 0, - "downloadBytes": 108682590 - }, - { - "type": "intermediary", - "timeSeconds": 1.000062738, - "uploadBytes": 0, - "downloadBytes": 58867758 - }, - { - "type": "intermediary", - "timeSeconds": 1.000078853, - "uploadBytes": 0, - "downloadBytes": 124455906 - }, - { - "type": "intermediary", - "timeSeconds": 1.007645584, - "uploadBytes": 0, - "downloadBytes": 125514130 - }, - { - "type": "intermediary", - "timeSeconds": 1.011512156, - "uploadBytes": 0, - "downloadBytes": 126451365 - }, - { - "type": "intermediary", - "timeSeconds": 1.012973937, - "uploadBytes": 0, - "downloadBytes": 126462188 - }, - { - "type": "intermediary", - "timeSeconds": 1.011646519, - "uploadBytes": 0, - "downloadBytes": 126304774 - }, - { - "type": "intermediary", - "timeSeconds": 1.017470797, - "uploadBytes": 0, - "downloadBytes": 126517604 - }, - { - "type": "intermediary", - "timeSeconds": 1.01297065, - "uploadBytes": 0, - "downloadBytes": 126368659 - }, - { - "type": "intermediary", - "timeSeconds": 1.015475387, - "uploadBytes": 0, - "downloadBytes": 126682757 - }, - { - "type": "intermediary", - "timeSeconds": 1.012641979, - "uploadBytes": 0, - "downloadBytes": 126463266 - }, - { - "type": "intermediary", - "timeSeconds": 1.000017942, - "uploadBytes": 0, - "downloadBytes": 107173621 - }, - { - "type": "intermediary", - "timeSeconds": 1.000137314, - "uploadBytes": 0, - "downloadBytes": 108952624 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001774, - "uploadBytes": 0, - "downloadBytes": 109032766 - }, - { - "type": "intermediary", - "timeSeconds": 1.000425494, - "uploadBytes": 0, - "downloadBytes": 110086664 - }, - { - "type": "intermediary", - "timeSeconds": 1.000193359, - "uploadBytes": 0, - "downloadBytes": 110680462 - }, - { - "type": "intermediary", - "timeSeconds": 1.000113308, - "uploadBytes": 0, - "downloadBytes": 109605465 - }, - { - "type": "intermediary", - "timeSeconds": 1.000039273, - "uploadBytes": 0, - "downloadBytes": 109828503 - }, - { - "type": "intermediary", - "timeSeconds": 1.00001871, - "uploadBytes": 0, - "downloadBytes": 109920442 - }, - { - "type": "intermediary", - "timeSeconds": 1.000151377, - "uploadBytes": 0, - "downloadBytes": 110651238 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001793, - "uploadBytes": 0, - "downloadBytes": 57092794 - }, - { - "type": "intermediary", - "timeSeconds": 1.000021628, - "uploadBytes": 0, - "downloadBytes": 124307358 - }, - { - "type": "intermediary", - "timeSeconds": 1.00173733, - "uploadBytes": 0, - "downloadBytes": 122256327 - }, - { - "type": "intermediary", - "timeSeconds": 1.0088999300000001, - "uploadBytes": 0, - "downloadBytes": 123801475 - }, - { - "type": "intermediary", - "timeSeconds": 1.000010741, - "uploadBytes": 0, - "downloadBytes": 124206230 - }, - { - "type": "intermediary", - "timeSeconds": 1.000018408, - "uploadBytes": 0, - "downloadBytes": 123280266 - }, - { - "type": "intermediary", - "timeSeconds": 1.014756592, - "uploadBytes": 0, - "downloadBytes": 123766743 - }, - { - "type": "intermediary", - "timeSeconds": 1.000048753, - "uploadBytes": 0, - "downloadBytes": 124029103 - }, - { - "type": "intermediary", - "timeSeconds": 1.000019655, - "uploadBytes": 0, - "downloadBytes": 123526891 - }, - { - "type": "intermediary", - "timeSeconds": 1.016180308, - "uploadBytes": 0, - "downloadBytes": 123899174 - }, - { - "type": "intermediary", - "timeSeconds": 1.000025532, - "uploadBytes": 0, - "downloadBytes": 124049571 - }, - { - "type": "intermediary", - "timeSeconds": 1.00004531, - "uploadBytes": 0, - "downloadBytes": 123108946 - }, - { - "type": "intermediary", - "timeSeconds": 1.047181127, - "uploadBytes": 0, - "downloadBytes": 108013170 - }, - { - "type": "intermediary", - "timeSeconds": 1.000036894, - "uploadBytes": 0, - "downloadBytes": 101549868 - }, - { - "type": "intermediary", - "timeSeconds": 1.000035807, - "uploadBytes": 0, - "downloadBytes": 107031536 - }, - { - "type": "intermediary", - "timeSeconds": 1.000889164, - "uploadBytes": 0, - "downloadBytes": 108439828 - }, - { - "type": "intermediary", - "timeSeconds": 1.000259751, - "uploadBytes": 0, - "downloadBytes": 107905756 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000096, - "uploadBytes": 0, - "downloadBytes": 107733910 - }, - { - "type": "intermediary", - "timeSeconds": 1.000105835, - "uploadBytes": 0, - "downloadBytes": 109141586 - }, - { - "type": "intermediary", - "timeSeconds": 1.003709333, - "uploadBytes": 0, - "downloadBytes": 58470423 - }, - { - "type": "intermediary", - "timeSeconds": 1.003959151, - "uploadBytes": 0, - "downloadBytes": 123928687 - }, - { - "type": "intermediary", - "timeSeconds": 1.000013043, - "uploadBytes": 0, - "downloadBytes": 125538100 - }, - { - "type": "intermediary", - "timeSeconds": 1.009997383, - "uploadBytes": 0, - "downloadBytes": 124441834 - }, - { - "type": "intermediary", - "timeSeconds": 1.000067884, - "uploadBytes": 0, - "downloadBytes": 124048118 - }, - { - "type": "intermediary", - "timeSeconds": 1.003629555, - "uploadBytes": 0, - "downloadBytes": 123566639 - }, - { - "type": "intermediary", - "timeSeconds": 1.000045847, - "uploadBytes": 0, - "downloadBytes": 125545567 - }, - { - "type": "intermediary", - "timeSeconds": 1.000022056, - "uploadBytes": 0, - "downloadBytes": 124729108 - }, - { - "type": "intermediary", - "timeSeconds": 1.00000225, - "uploadBytes": 0, - "downloadBytes": 122287624 - }, - { - "type": "intermediary", - "timeSeconds": 1.000031044, - "uploadBytes": 0, - "downloadBytes": 125443960 - }, - { - "type": "intermediary", - "timeSeconds": 1.01122652, - "uploadBytes": 0, - "downloadBytes": 124171280 - }, - { - "type": "intermediary", - "timeSeconds": 1.000005302, - "uploadBytes": 0, - "downloadBytes": 124625326 - }, - { - "type": "intermediary", - "timeSeconds": 1.003769088, - "uploadBytes": 0, - "downloadBytes": 123083638 - }, - { - "type": "intermediary", - "timeSeconds": 1.000048979, - "uploadBytes": 0, - "downloadBytes": 125287100 - }, - { - "type": "intermediary", - "timeSeconds": 1.000045577, - "uploadBytes": 0, - "downloadBytes": 124763672 - }, - { - "type": "intermediary", - "timeSeconds": 1.000075167, - "uploadBytes": 0, - "downloadBytes": 122145044 - }, - { - "type": "intermediary", - "timeSeconds": 1.00005885, - "uploadBytes": 0, - "downloadBytes": 124677592 - }, - { - "type": "intermediary", - "timeSeconds": 1.000005443, - "uploadBytes": 0, - "downloadBytes": 124536132 - }, - { - "type": "intermediary", - "timeSeconds": 1.000049208, - "uploadBytes": 0, - "downloadBytes": 123133708 - }, - { - "type": "intermediary", - "timeSeconds": 1.000739808, - "uploadBytes": 0, - "downloadBytes": 58480073 - }, - { - "type": "intermediary", - "timeSeconds": 1.000044264, - "uploadBytes": 0, - "downloadBytes": 124545521 - }, - { - "type": "intermediary", - "timeSeconds": 1.011175912, - "uploadBytes": 0, - "downloadBytes": 125794129 - }, - { - "type": "intermediary", - "timeSeconds": 1.014031507, - "uploadBytes": 0, - "downloadBytes": 126324523 - }, - { - "type": "intermediary", - "timeSeconds": 1.014137842, - "uploadBytes": 0, - "downloadBytes": 126315088 - }, - { - "type": "intermediary", - "timeSeconds": 1.016454167, - "uploadBytes": 0, - "downloadBytes": 126467143 - }, - { - "type": "intermediary", - "timeSeconds": 1.014075451, - "uploadBytes": 0, - "downloadBytes": 126436281 - }, - { - "type": "intermediary", - "timeSeconds": 1.000244879, - "uploadBytes": 0, - "downloadBytes": 110936262 - }, - { - "type": "intermediary", - "timeSeconds": 1.000010391, - "uploadBytes": 0, - "downloadBytes": 108811586 - }, - { - "type": "intermediary", - "timeSeconds": 1.000013869, - "uploadBytes": 0, - "downloadBytes": 108819258 - }, - { - "type": "intermediary", - "timeSeconds": 1.000144381, - "uploadBytes": 0, - "downloadBytes": 108898336 - }, - { - "type": "intermediary", - "timeSeconds": 1.000187709, - "uploadBytes": 0, - "downloadBytes": 110449485 - }, - { - "type": "intermediary", - "timeSeconds": 1.000170519, - "uploadBytes": 0, - "downloadBytes": 109529803 - }, - { - "type": "intermediary", - "timeSeconds": 1.000129326, - "uploadBytes": 0, - "downloadBytes": 109699130 - }, - { - "type": "intermediary", - "timeSeconds": 1.000120434, - "uploadBytes": 0, - "downloadBytes": 110071189 - }, - { - "type": "intermediary", - "timeSeconds": 1.000112427, - "uploadBytes": 0, - "downloadBytes": 110394727 - }, - { - "type": "intermediary", - "timeSeconds": 1.000553361, - "uploadBytes": 0, - "downloadBytes": 110747404 - }, - { - "type": "intermediary", - "timeSeconds": 1.000126748, - "uploadBytes": 0, - "downloadBytes": 110771306 - }, - { - "type": "intermediary", - "timeSeconds": 1.000020529, - "uploadBytes": 0, - "downloadBytes": 110822773 - }, - { - "type": "intermediary", - "timeSeconds": 1.007901382, - "uploadBytes": 0, - "downloadBytes": 56042884 - }, - { - "type": "intermediary", - "timeSeconds": 1.000111896, - "uploadBytes": 0, - "downloadBytes": 128117972 - }, - { - "type": "intermediary", - "timeSeconds": 1.007335416, - "uploadBytes": 0, - "downloadBytes": 124442985 - }, - { - "type": "intermediary", - "timeSeconds": 1.024034693, - "uploadBytes": 0, - "downloadBytes": 126396643 - }, - { - "type": "intermediary", - "timeSeconds": 1.024876859, - "uploadBytes": 0, - "downloadBytes": 126475770 - }, - { - "type": "intermediary", - "timeSeconds": 1.00001054, - "uploadBytes": 0, - "downloadBytes": 126170900 - }, - { - "type": "intermediary", - "timeSeconds": 1.00437478, - "uploadBytes": 0, - "downloadBytes": 119054942 - }, - { - "type": "intermediary", - "timeSeconds": 1.011161739, - "uploadBytes": 0, - "downloadBytes": 116072716 - }, - { - "type": "intermediary", - "timeSeconds": 1.000025186, - "uploadBytes": 0, - "downloadBytes": 125639562 - }, - { - "type": "intermediary", - "timeSeconds": 1.000014414, - "uploadBytes": 0, - "downloadBytes": 122281664 - }, - { - "type": "intermediary", - "timeSeconds": 1.009131878, - "uploadBytes": 0, - "downloadBytes": 123602302 - }, - { - "type": "intermediary", - "timeSeconds": 1.000024837, - "uploadBytes": 0, - "downloadBytes": 125963248 - }, - { - "type": "intermediary", - "timeSeconds": 1.00002114, - "uploadBytes": 0, - "downloadBytes": 121836804 - }, - { - "type": "intermediary", - "timeSeconds": 1.013111105, - "uploadBytes": 0, - "downloadBytes": 123932794 - }, - { - "type": "intermediary", - "timeSeconds": 1.000006397, - "uploadBytes": 0, - "downloadBytes": 126037220 - }, - { - "type": "intermediary", - "timeSeconds": 1.000182606, - "uploadBytes": 0, - "downloadBytes": 121712753 - }, - { - "type": "intermediary", - "timeSeconds": 1.013172296, - "uploadBytes": 0, - "downloadBytes": 123801429 - }, - { - "type": "intermediary", - "timeSeconds": 1.000009751, - "uploadBytes": 0, - "downloadBytes": 126462277 - }, - { - "type": "intermediary", - "timeSeconds": 1.000042395, - "uploadBytes": 0, - "downloadBytes": 121529061 - }, - { - "type": "intermediary", - "timeSeconds": 1.000146414, - "uploadBytes": 0, - "downloadBytes": 57546422 - }, - { - "type": "intermediary", - "timeSeconds": 1.000062164, - "uploadBytes": 0, - "downloadBytes": 124839576 - }, - { - "type": "intermediary", - "timeSeconds": 1.007441592, - "uploadBytes": 0, - "downloadBytes": 126433725 - }, - { - "type": "intermediary", - "timeSeconds": 1.008223448, - "uploadBytes": 0, - "downloadBytes": 126465465 - }, - { - "type": "intermediary", - "timeSeconds": 1.006928898, - "uploadBytes": 0, - "downloadBytes": 126290692 - }, - { - "type": "intermediary", - "timeSeconds": 1.008939272, - "uploadBytes": 0, - "downloadBytes": 126369344 - }, - { - "type": "intermediary", - "timeSeconds": 1.006876759, - "uploadBytes": 0, - "downloadBytes": 126339576 - }, - { - "type": "intermediary", - "timeSeconds": 1.006645472, - "uploadBytes": 0, - "downloadBytes": 126287872 - }, - { - "type": "intermediary", - "timeSeconds": 1.007704495, - "uploadBytes": 0, - "downloadBytes": 126518052 - }, - { - "type": "intermediary", - "timeSeconds": 1.008452582, - "uploadBytes": 0, - "downloadBytes": 126460506 - }, - { - "type": "intermediary", - "timeSeconds": 1.007655661, - "uploadBytes": 0, - "downloadBytes": 126391361 - }, - { - "type": "intermediary", - "timeSeconds": 1.00906316, - "uploadBytes": 0, - "downloadBytes": 126386615 - }, - { - "type": "intermediary", - "timeSeconds": 1.010562303, - "uploadBytes": 0, - "downloadBytes": 126679917 - }, - { - "type": "intermediary", - "timeSeconds": 1.008236883, - "uploadBytes": 0, - "downloadBytes": 126458077 - }, - { - "type": "intermediary", - "timeSeconds": 1.00711998, - "uploadBytes": 0, - "downloadBytes": 126353399 - }, - { - "type": "intermediary", - "timeSeconds": 1.009091368, - "uploadBytes": 0, - "downloadBytes": 126470429 - }, - { - "type": "intermediary", - "timeSeconds": 1.010798662, - "uploadBytes": 0, - "downloadBytes": 126530332 - }, - { - "type": "intermediary", - "timeSeconds": 1.007523911, - "uploadBytes": 0, - "downloadBytes": 126304735 - }, - { - "type": "intermediary", - "timeSeconds": 1.008181313, - "uploadBytes": 0, - "downloadBytes": 126602907 - }, - { - "type": "intermediary", - "timeSeconds": 1.003880348, - "uploadBytes": 0, - "downloadBytes": 61126295 - }, - { - "type": "intermediary", - "timeSeconds": 1.000185475, - "uploadBytes": 0, - "downloadBytes": 105557133 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001782, - "uploadBytes": 0, - "downloadBytes": 110225912 - }, - { - "type": "intermediary", - "timeSeconds": 1.000028302, - "uploadBytes": 0, - "downloadBytes": 110333480 - }, - { - "type": "intermediary", - "timeSeconds": 1.000347368, - "uploadBytes": 0, - "downloadBytes": 110566282 - }, - { - "type": "intermediary", - "timeSeconds": 1.000246734, - "uploadBytes": 0, - "downloadBytes": 110644042 - }, - { - "type": "intermediary", - "timeSeconds": 1.000274409, - "uploadBytes": 0, - "downloadBytes": 110775312 - }, - { - "type": "intermediary", - "timeSeconds": 1.000149536, - "uploadBytes": 0, - "downloadBytes": 110989108 - }, - { - "type": "intermediary", - "timeSeconds": 1.000046316, - "uploadBytes": 0, - "downloadBytes": 111436114 - }, - { - "type": "intermediary", - "timeSeconds": 1.000105206, - "uploadBytes": 0, - "downloadBytes": 111463778 - }, - { - "type": "intermediary", - "timeSeconds": 1.000074141, - "uploadBytes": 0, - "downloadBytes": 111330401 - }, - { - "type": "intermediary", - "timeSeconds": 1.000062552, - "uploadBytes": 0, - "downloadBytes": 111490561 - }, - { - "type": "intermediary", - "timeSeconds": 1.000073225, - "uploadBytes": 0, - "downloadBytes": 111633116 - }, - { - "type": "intermediary", - "timeSeconds": 1.00018254, - "uploadBytes": 0, - "downloadBytes": 111939706 - }, - { - "type": "intermediary", - "timeSeconds": 1.000021656, - "uploadBytes": 0, - "downloadBytes": 112069616 - }, - { - "type": "intermediary", - "timeSeconds": 1.000067462, - "uploadBytes": 0, - "downloadBytes": 112278390 - }, - { - "type": "intermediary", - "timeSeconds": 1.000059274, - "uploadBytes": 0, - "downloadBytes": 112407754 - }, - { - "type": "intermediary", - "timeSeconds": 1.000013139, - "uploadBytes": 0, - "downloadBytes": 112642568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000192475, - "uploadBytes": 0, - "downloadBytes": 112794477 - } - ], - "implementation": "go-libp2p", - "version": "v0.28", - "transportStack": "quic-v1" - }, - { - "result": [ - { - "type": "intermediary", - "timeSeconds": 1.035548492, - "uploadBytes": 0, - "downloadBytes": 33554432 - }, - { - "type": "intermediary", - "timeSeconds": 1.011070874, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.008681481, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.009296497, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015246489, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.012020374, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.000064811, - "uploadBytes": 0, - "downloadBytes": 100802560 - }, - { - "type": "intermediary", - "timeSeconds": 1.013808457, - "uploadBytes": 0, - "downloadBytes": 108912640 - }, - { - "type": "intermediary", - "timeSeconds": 1.009814084, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.003713129, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.011597892, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.006847771, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.006496083, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.000015618, - "uploadBytes": 0, - "downloadBytes": 109322240 - }, - { - "type": "intermediary", - "timeSeconds": 1.015592504, - "uploadBytes": 0, - "downloadBytes": 108781568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000054339, - "uploadBytes": 0, - "downloadBytes": 110239744 - }, - { - "type": "intermediary", - "timeSeconds": 1.013655223, - "uploadBytes": 0, - "downloadBytes": 107864064 - }, - { - "type": "intermediary", - "timeSeconds": 1.013016412, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.006360994, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024058589, - "uploadBytes": 0, - "downloadBytes": 14491648 - }, - { - "type": "intermediary", - "timeSeconds": 1.017108696, - "uploadBytes": 0, - "downloadBytes": 102948864 - }, - { - "type": "intermediary", - "timeSeconds": 1.01631575, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.021795014, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016513987, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.018294002, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016749631, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020548988, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017333784, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.027280766, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.021550914, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.021947677, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.023265619, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.014834455, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.019219836, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.02356986, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.026606186, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017861342, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016963982, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.000058437, - "uploadBytes": 0, - "downloadBytes": 16654336 - }, - { - "type": "intermediary", - "timeSeconds": 1.059808852, - "uploadBytes": 0, - "downloadBytes": 109174784 - }, - { - "type": "intermediary", - "timeSeconds": 1.000038146, - "uploadBytes": 0, - "downloadBytes": 109322240 - }, - { - "type": "intermediary", - "timeSeconds": 1.000038664, - "uploadBytes": 0, - "downloadBytes": 112132096 - }, - { - "type": "intermediary", - "timeSeconds": 1.000085359, - "uploadBytes": 0, - "downloadBytes": 108527616 - }, - { - "type": "intermediary", - "timeSeconds": 1.001574298, - "uploadBytes": 0, - "downloadBytes": 106225664 - }, - { - "type": "intermediary", - "timeSeconds": 1.002890939, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.001014563, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000182, - "uploadBytes": 0, - "downloadBytes": 111255552 - }, - { - "type": "intermediary", - "timeSeconds": 1.000106724, - "uploadBytes": 0, - "downloadBytes": 114327552 - }, - { - "type": "intermediary", - "timeSeconds": 1.000051593, - "uploadBytes": 0, - "downloadBytes": 109838336 - }, - { - "type": "intermediary", - "timeSeconds": 1.000073995, - "uploadBytes": 0, - "downloadBytes": 108199936 - }, - { - "type": "intermediary", - "timeSeconds": 1.000053962, - "uploadBytes": 0, - "downloadBytes": 104136704 - }, - { - "type": "intermediary", - "timeSeconds": 1.000123587, - "uploadBytes": 0, - "downloadBytes": 108789760 - }, - { - "type": "intermediary", - "timeSeconds": 1.000075793, - "uploadBytes": 0, - "downloadBytes": 111149056 - }, - { - "type": "intermediary", - "timeSeconds": 1.058112388, - "uploadBytes": 0, - "downloadBytes": 113106944 - }, - { - "type": "intermediary", - "timeSeconds": 1.003614749, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.00050243, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.000009024, - "uploadBytes": 0, - "downloadBytes": 109117440 - }, - { - "type": "intermediary", - "timeSeconds": 1.031509064, - "uploadBytes": 0, - "downloadBytes": 8388608 - }, - { - "type": "intermediary", - "timeSeconds": 1.004201984, - "uploadBytes": 0, - "downloadBytes": 100663296 - }, - { - "type": "intermediary", - "timeSeconds": 1.032397896, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.040571568, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.035836185, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.034305308, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.027806561, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.033964738, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.023122464, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.032163427, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.028285728, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024574989, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.030492028, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.037932683, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.030902648, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.023542605, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.036189583, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024239754, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.035106685, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.009427918, - "uploadBytes": 0, - "downloadBytes": 16777216 - }, - { - "type": "intermediary", - "timeSeconds": 1.012605064, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.008410703, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.000093133, - "uploadBytes": 0, - "downloadBytes": 109518848 - }, - { - "type": "intermediary", - "timeSeconds": 1.000062965, - "uploadBytes": 0, - "downloadBytes": 107216896 - }, - { - "type": "intermediary", - "timeSeconds": 1.000004883, - "uploadBytes": 0, - "downloadBytes": 105054208 - }, - { - "type": "intermediary", - "timeSeconds": 1.034390066, - "uploadBytes": 0, - "downloadBytes": 97640448 - }, - { - "type": "intermediary", - "timeSeconds": 1.013614954, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.007239233, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.006780737, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.005081874, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.006313371, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.00119442, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.001027594, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.003718962, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.000037547, - "uploadBytes": 0, - "downloadBytes": 109584384 - }, - { - "type": "intermediary", - "timeSeconds": 1.004151108, - "uploadBytes": 0, - "downloadBytes": 108519424 - }, - { - "type": "intermediary", - "timeSeconds": 1.004087281, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.005173269, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.013124365, - "uploadBytes": 0, - "downloadBytes": 14491648 - }, - { - "type": "intermediary", - "timeSeconds": 1.00342898, - "uploadBytes": 0, - "downloadBytes": 102948864 - }, - { - "type": "intermediary", - "timeSeconds": 1.014646839, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017724228, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.011111204, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.010995597, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.008514733, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017602703, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015174785, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.021506346, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.012581551, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.00723295, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.01692885, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.008929157, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017537092, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.010006972, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.00814959, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.009901715, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016743264, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.023379036, - "uploadBytes": 0, - "downloadBytes": 25165824 - }, - { - "type": "intermediary", - "timeSeconds": 1.003382273, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.00371169, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.006620503, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.000088133, - "uploadBytes": 0, - "downloadBytes": 109649920 - }, - { - "type": "intermediary", - "timeSeconds": 1.011159759, - "uploadBytes": 0, - "downloadBytes": 108453888 - }, - { - "type": "intermediary", - "timeSeconds": 1.00733385, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.01009554, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.010120722, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.004919425, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.010422856, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.014341891, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.005324005, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.006787825, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.003722716, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.012905418, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.005767742, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.008042387, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.010406654, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.038991362, - "uploadBytes": 0, - "downloadBytes": 25165824 - }, - { - "type": "intermediary", - "timeSeconds": 1.018306298, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020276707, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.025744339, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.01979317, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.018353625, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.019516475, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.021355189, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020056689, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.021670801, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017190236, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.021733628, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.02051612, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017996946, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.026833453, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.018312473, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.022050358, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.014865607, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.022823138, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.002560658, - "uploadBytes": 0, - "downloadBytes": 16777216 - }, - { - "type": "intermediary", - "timeSeconds": 1.060206129, - "uploadBytes": 0, - "downloadBytes": 117440512 - }, - { - "type": "intermediary", - "timeSeconds": 1.000020978, - "uploadBytes": 0, - "downloadBytes": 109256704 - }, - { - "type": "intermediary", - "timeSeconds": 1.000076844, - "uploadBytes": 0, - "downloadBytes": 108986368 - }, - { - "type": "intermediary", - "timeSeconds": 1.009328478, - "uploadBytes": 0, - "downloadBytes": 108912640 - }, - { - "type": "intermediary", - "timeSeconds": 1.002951853, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.000020547, - "uploadBytes": 0, - "downloadBytes": 111419392 - }, - { - "type": "intermediary", - "timeSeconds": 1.003251476, - "uploadBytes": 0, - "downloadBytes": 106684416 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000293, - "uploadBytes": 0, - "downloadBytes": 109633536 - }, - { - "type": "intermediary", - "timeSeconds": 1.003446382, - "uploadBytes": 0, - "downloadBytes": 108470272 - }, - { - "type": "intermediary", - "timeSeconds": 1.006899796, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.00278761, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.003648448, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.000058504, - "uploadBytes": 0, - "downloadBytes": 112861184 - }, - { - "type": "intermediary", - "timeSeconds": 1.000004582, - "uploadBytes": 0, - "downloadBytes": 106299392 - }, - { - "type": "intermediary", - "timeSeconds": 1.000055518, - "uploadBytes": 0, - "downloadBytes": 108003328 - }, - { - "type": "intermediary", - "timeSeconds": 1.000013879, - "uploadBytes": 0, - "downloadBytes": 109969408 - }, - { - "type": "intermediary", - "timeSeconds": 1.001757509, - "uploadBytes": 0, - "downloadBytes": 108126208 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000821, - "uploadBytes": 0, - "downloadBytes": 111812608 - }, - { - "type": "intermediary", - "timeSeconds": 1.002736337, - "uploadBytes": 0, - "downloadBytes": 8388608 - }, - { - "type": "intermediary", - "timeSeconds": 1.005649804, - "uploadBytes": 0, - "downloadBytes": 33554432 - }, - { - "type": "intermediary", - "timeSeconds": 1.001321321, - "uploadBytes": 0, - "downloadBytes": 33554432 - }, - { - "type": "intermediary", - "timeSeconds": 1.007479584, - "uploadBytes": 0, - "downloadBytes": 39198720 - }, - { - "type": "intermediary", - "timeSeconds": 1.028258823, - "uploadBytes": 0, - "downloadBytes": 44687360 - }, - { - "type": "intermediary", - "timeSeconds": 1.021750308, - "uploadBytes": 0, - "downloadBytes": 44965888 - }, - { - "type": "intermediary", - "timeSeconds": 1.018418144, - "uploadBytes": 0, - "downloadBytes": 45154304 - }, - { - "type": "intermediary", - "timeSeconds": 1.020581781, - "uploadBytes": 0, - "downloadBytes": 44097536 - }, - { - "type": "intermediary", - "timeSeconds": 1.015980265, - "uploadBytes": 0, - "downloadBytes": 45162496 - }, - { - "type": "intermediary", - "timeSeconds": 1.015164808, - "uploadBytes": 0, - "downloadBytes": 45219840 - }, - { - "type": "intermediary", - "timeSeconds": 1.019330995, - "uploadBytes": 0, - "downloadBytes": 43835392 - }, - { - "type": "intermediary", - "timeSeconds": 1.016893591, - "uploadBytes": 0, - "downloadBytes": 45228032 - }, - { - "type": "intermediary", - "timeSeconds": 1.016478215, - "uploadBytes": 0, - "downloadBytes": 45219840 - }, - { - "type": "intermediary", - "timeSeconds": 1.018737629, - "uploadBytes": 0, - "downloadBytes": 43769856 - }, - { - "type": "intermediary", - "timeSeconds": 1.014411368, - "uploadBytes": 0, - "downloadBytes": 45228032 - }, - { - "type": "intermediary", - "timeSeconds": 1.014489053, - "uploadBytes": 0, - "downloadBytes": 45219840 - }, - { - "type": "intermediary", - "timeSeconds": 1.017154675, - "uploadBytes": 0, - "downloadBytes": 43769856 - }, - { - "type": "intermediary", - "timeSeconds": 1.016011246, - "uploadBytes": 0, - "downloadBytes": 45228032 - }, - { - "type": "intermediary", - "timeSeconds": 1.013545065, - "uploadBytes": 0, - "downloadBytes": 45219840 - } - ], - "implementation": "go-libp2p", - "version": "v0.29", - "transportStack": "tcp" - }, - { - "result": [ - { - "type": "intermediary", - "timeSeconds": 1.000991574, - "uploadBytes": 0, - "downloadBytes": 61094609 - }, - { - "type": "intermediary", - "timeSeconds": 1.03539054, - "uploadBytes": 0, - "downloadBytes": 116409041 - }, - { - "type": "intermediary", - "timeSeconds": 1.003159914, - "uploadBytes": 0, - "downloadBytes": 103682182 - }, - { - "type": "intermediary", - "timeSeconds": 1.000059271, - "uploadBytes": 0, - "downloadBytes": 126568337 - }, - { - "type": "intermediary", - "timeSeconds": 1.000039854, - "uploadBytes": 0, - "downloadBytes": 126765639 - }, - { - "type": "intermediary", - "timeSeconds": 1.000104157, - "uploadBytes": 0, - "downloadBytes": 126710698 - }, - { - "type": "intermediary", - "timeSeconds": 1.000029125, - "uploadBytes": 0, - "downloadBytes": 126686728 - }, - { - "type": "intermediary", - "timeSeconds": 1.000012623, - "uploadBytes": 0, - "downloadBytes": 126722654 - }, - { - "type": "intermediary", - "timeSeconds": 1.0000075, - "uploadBytes": 0, - "downloadBytes": 126636970 - }, - { - "type": "intermediary", - "timeSeconds": 1.000132521, - "uploadBytes": 0, - "downloadBytes": 126620816 - }, - { - "type": "intermediary", - "timeSeconds": 1.000211523, - "uploadBytes": 0, - "downloadBytes": 126718504 - }, - { - "type": "intermediary", - "timeSeconds": 1.000048306, - "uploadBytes": 0, - "downloadBytes": 126780368 - }, - { - "type": "intermediary", - "timeSeconds": 1.000066147, - "uploadBytes": 0, - "downloadBytes": 126521896 - }, - { - "type": "intermediary", - "timeSeconds": 1.000069932, - "uploadBytes": 0, - "downloadBytes": 126540174 - }, - { - "type": "intermediary", - "timeSeconds": 1.000103395, - "uploadBytes": 0, - "downloadBytes": 126580948 - }, - { - "type": "intermediary", - "timeSeconds": 1.000047526, - "uploadBytes": 0, - "downloadBytes": 126791070 - }, - { - "type": "intermediary", - "timeSeconds": 1.000037106, - "uploadBytes": 0, - "downloadBytes": 126766308 - }, - { - "type": "intermediary", - "timeSeconds": 1.011202996, - "uploadBytes": 0, - "downloadBytes": 119624290 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001708, - "uploadBytes": 0, - "downloadBytes": 79873836 - }, - { - "type": "intermediary", - "timeSeconds": 1.007695572, - "uploadBytes": 0, - "downloadBytes": 61202795 - }, - { - "type": "intermediary", - "timeSeconds": 1.000115801, - "uploadBytes": 0, - "downloadBytes": 102255001 - }, - { - "type": "intermediary", - "timeSeconds": 1.000024759, - "uploadBytes": 0, - "downloadBytes": 110184614 - }, - { - "type": "intermediary", - "timeSeconds": 1.000034953, - "uploadBytes": 0, - "downloadBytes": 110218862 - }, - { - "type": "intermediary", - "timeSeconds": 1.000078016, - "uploadBytes": 0, - "downloadBytes": 58876440 - }, - { - "type": "intermediary", - "timeSeconds": 1.000010422, - "uploadBytes": 0, - "downloadBytes": 54545951 - }, - { - "type": "intermediary", - "timeSeconds": 1.000019138, - "uploadBytes": 0, - "downloadBytes": 54694101 - }, - { - "type": "intermediary", - "timeSeconds": 1.000086915, - "uploadBytes": 0, - "downloadBytes": 55031910 - }, - { - "type": "intermediary", - "timeSeconds": 1.000106105, - "uploadBytes": 0, - "downloadBytes": 55252488 - }, - { - "type": "intermediary", - "timeSeconds": 1.00048322, - "uploadBytes": 0, - "downloadBytes": 55537192 - }, - { - "type": "intermediary", - "timeSeconds": 1.000292828, - "uploadBytes": 0, - "downloadBytes": 55790410 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000095, - "uploadBytes": 0, - "downloadBytes": 55880382 - }, - { - "type": "intermediary", - "timeSeconds": 1.000194638, - "uploadBytes": 0, - "downloadBytes": 56119232 - }, - { - "type": "intermediary", - "timeSeconds": 1.00009516, - "uploadBytes": 0, - "downloadBytes": 56492498 - }, - { - "type": "intermediary", - "timeSeconds": 1.000334748, - "uploadBytes": 0, - "downloadBytes": 56822523 - }, - { - "type": "intermediary", - "timeSeconds": 1.000172384, - "uploadBytes": 0, - "downloadBytes": 57129339 - }, - { - "type": "intermediary", - "timeSeconds": 1.000087895, - "uploadBytes": 0, - "downloadBytes": 57342446 - }, - { - "type": "intermediary", - "timeSeconds": 1.000034984, - "uploadBytes": 0, - "downloadBytes": 57688308 - }, - { - "type": "intermediary", - "timeSeconds": 1.000293295, - "uploadBytes": 0, - "downloadBytes": 57806668 - }, - { - "type": "intermediary", - "timeSeconds": 1.000040113, - "uploadBytes": 0, - "downloadBytes": 47700919 - }, - { - "type": "intermediary", - "timeSeconds": 1.018444573, - "uploadBytes": 0, - "downloadBytes": 121861595 - }, - { - "type": "intermediary", - "timeSeconds": 1.013430912, - "uploadBytes": 0, - "downloadBytes": 126640932 - }, - { - "type": "intermediary", - "timeSeconds": 1.000312374, - "uploadBytes": 0, - "downloadBytes": 85601296 - }, - { - "type": "intermediary", - "timeSeconds": 1.00017026, - "uploadBytes": 0, - "downloadBytes": 74737096 - }, - { - "type": "intermediary", - "timeSeconds": 1.000028897, - "uploadBytes": 0, - "downloadBytes": 74580236 - }, - { - "type": "intermediary", - "timeSeconds": 1.000090489, - "uploadBytes": 0, - "downloadBytes": 75119498 - }, - { - "type": "intermediary", - "timeSeconds": 1.00001175, - "uploadBytes": 0, - "downloadBytes": 75508752 - }, - { - "type": "intermediary", - "timeSeconds": 1.000043278, - "uploadBytes": 0, - "downloadBytes": 76257114 - }, - { - "type": "intermediary", - "timeSeconds": 1.000057511, - "uploadBytes": 0, - "downloadBytes": 76356490 - }, - { - "type": "intermediary", - "timeSeconds": 1.00003552, - "uploadBytes": 0, - "downloadBytes": 75953672 - }, - { - "type": "intermediary", - "timeSeconds": 1.000016656, - "uploadBytes": 0, - "downloadBytes": 76753936 - }, - { - "type": "intermediary", - "timeSeconds": 1.000047496, - "uploadBytes": 0, - "downloadBytes": 76739568 - }, - { - "type": "intermediary", - "timeSeconds": 1.000096505, - "uploadBytes": 0, - "downloadBytes": 76603084 - }, - { - "type": "intermediary", - "timeSeconds": 1.000226562, - "uploadBytes": 0, - "downloadBytes": 77168454 - }, - { - "type": "intermediary", - "timeSeconds": 1.000174953, - "uploadBytes": 0, - "downloadBytes": 77362866 - }, - { - "type": "intermediary", - "timeSeconds": 1.000063982, - "uploadBytes": 0, - "downloadBytes": 77703502 - }, - { - "type": "intermediary", - "timeSeconds": 1.000305187, - "uploadBytes": 0, - "downloadBytes": 77785852 - }, - { - "type": "intermediary", - "timeSeconds": 1.000246489, - "uploadBytes": 0, - "downloadBytes": 77864960 - }, - { - "type": "intermediary", - "timeSeconds": 1.002659081, - "uploadBytes": 0, - "downloadBytes": 55883308 - }, - { - "type": "intermediary", - "timeSeconds": 1.017750182, - "uploadBytes": 0, - "downloadBytes": 124016284 - }, - { - "type": "intermediary", - "timeSeconds": 1.00081904, - "uploadBytes": 0, - "downloadBytes": 123704032 - }, - { - "type": "intermediary", - "timeSeconds": 1.002261574, - "uploadBytes": 0, - "downloadBytes": 121117587 - }, - { - "type": "intermediary", - "timeSeconds": 1.001128024, - "uploadBytes": 0, - "downloadBytes": 123946181 - }, - { - "type": "intermediary", - "timeSeconds": 1.007741952, - "uploadBytes": 0, - "downloadBytes": 121404834 - }, - { - "type": "intermediary", - "timeSeconds": 1.000123251, - "uploadBytes": 0, - "downloadBytes": 123985652 - }, - { - "type": "intermediary", - "timeSeconds": 1.005806637, - "uploadBytes": 0, - "downloadBytes": 121053452 - }, - { - "type": "intermediary", - "timeSeconds": 1.000010435, - "uploadBytes": 0, - "downloadBytes": 124357986 - }, - { - "type": "intermediary", - "timeSeconds": 1.007891354, - "uploadBytes": 0, - "downloadBytes": 120677076 - }, - { - "type": "intermediary", - "timeSeconds": 1.0001867, - "uploadBytes": 0, - "downloadBytes": 125095326 - }, - { - "type": "intermediary", - "timeSeconds": 1.008453965, - "uploadBytes": 0, - "downloadBytes": 120274261 - }, - { - "type": "intermediary", - "timeSeconds": 1.000032068, - "uploadBytes": 0, - "downloadBytes": 125428639 - }, - { - "type": "intermediary", - "timeSeconds": 1.006311328, - "uploadBytes": 0, - "downloadBytes": 119897917 - }, - { - "type": "intermediary", - "timeSeconds": 1.000020515, - "uploadBytes": 0, - "downloadBytes": 125551275 - }, - { - "type": "intermediary", - "timeSeconds": 1.008060125, - "uploadBytes": 0, - "downloadBytes": 119629612 - }, - { - "type": "intermediary", - "timeSeconds": 1.000035459, - "uploadBytes": 0, - "downloadBytes": 125164464 - }, - { - "type": "intermediary", - "timeSeconds": 1.0082638290000001, - "uploadBytes": 0, - "downloadBytes": 120135378 - }, - { - "type": "intermediary", - "timeSeconds": 1.000047242, - "uploadBytes": 0, - "downloadBytes": 125320054 - }, - { - "type": "intermediary", - "timeSeconds": 1.000003489, - "uploadBytes": 0, - "downloadBytes": 57810944 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001523, - "uploadBytes": 0, - "downloadBytes": 122500814 - }, - { - "type": "intermediary", - "timeSeconds": 1.00005673, - "uploadBytes": 0, - "downloadBytes": 125834821 - }, - { - "type": "intermediary", - "timeSeconds": 1.00012641, - "uploadBytes": 0, - "downloadBytes": 121686261 - }, - { - "type": "intermediary", - "timeSeconds": 1.002380752, - "uploadBytes": 0, - "downloadBytes": 123388370 - }, - { - "type": "intermediary", - "timeSeconds": 1.000024258, - "uploadBytes": 0, - "downloadBytes": 125962735 - }, - { - "type": "intermediary", - "timeSeconds": 1.000010284, - "uploadBytes": 0, - "downloadBytes": 122013941 - }, - { - "type": "intermediary", - "timeSeconds": 1.006552121, - "uploadBytes": 0, - "downloadBytes": 123446104 - }, - { - "type": "intermediary", - "timeSeconds": 1.00000117, - "uploadBytes": 0, - "downloadBytes": 126600864 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001221, - "uploadBytes": 0, - "downloadBytes": 121953278 - }, - { - "type": "intermediary", - "timeSeconds": 1.009590944, - "uploadBytes": 0, - "downloadBytes": 123179804 - }, - { - "type": "intermediary", - "timeSeconds": 1.024184126, - "uploadBytes": 0, - "downloadBytes": 126661639 - }, - { - "type": "intermediary", - "timeSeconds": 1.024888513, - "uploadBytes": 0, - "downloadBytes": 126721862 - }, - { - "type": "intermediary", - "timeSeconds": 1.001155416, - "uploadBytes": 0, - "downloadBytes": 112392590 - }, - { - "type": "intermediary", - "timeSeconds": 1.007539583, - "uploadBytes": 0, - "downloadBytes": 67477025 - }, - { - "type": "intermediary", - "timeSeconds": 1.000115073, - "uploadBytes": 0, - "downloadBytes": 53868942 - }, - { - "type": "intermediary", - "timeSeconds": 1.000023622, - "uploadBytes": 0, - "downloadBytes": 53190168 - }, - { - "type": "intermediary", - "timeSeconds": 1.000096276, - "uploadBytes": 0, - "downloadBytes": 53311456 - }, - { - "type": "intermediary", - "timeSeconds": 1.000735462, - "uploadBytes": 0, - "downloadBytes": 54559394 - }, - { - "type": "intermediary", - "timeSeconds": 1.005078313, - "uploadBytes": 0, - "downloadBytes": 58417244 - }, - { - "type": "intermediary", - "timeSeconds": 1.004909234, - "uploadBytes": 0, - "downloadBytes": 123853614 - }, - { - "type": "intermediary", - "timeSeconds": 1.000037776, - "uploadBytes": 0, - "downloadBytes": 125035638 - }, - { - "type": "intermediary", - "timeSeconds": 1.000450221, - "uploadBytes": 0, - "downloadBytes": 122731582 - }, - { - "type": "intermediary", - "timeSeconds": 1.001615237, - "uploadBytes": 0, - "downloadBytes": 123843309 - }, - { - "type": "intermediary", - "timeSeconds": 1.000157983, - "uploadBytes": 0, - "downloadBytes": 124274327 - }, - { - "type": "intermediary", - "timeSeconds": 1.002647802, - "uploadBytes": 0, - "downloadBytes": 123627211 - }, - { - "type": "intermediary", - "timeSeconds": 1.002298482, - "uploadBytes": 0, - "downloadBytes": 123842633 - }, - { - "type": "intermediary", - "timeSeconds": 1.000243223, - "uploadBytes": 0, - "downloadBytes": 124012841 - }, - { - "type": "intermediary", - "timeSeconds": 1.007782498, - "uploadBytes": 0, - "downloadBytes": 124136425 - }, - { - "type": "intermediary", - "timeSeconds": 1.000079576, - "uploadBytes": 0, - "downloadBytes": 124061054 - }, - { - "type": "intermediary", - "timeSeconds": 1.00006796, - "uploadBytes": 0, - "downloadBytes": 124303514 - }, - { - "type": "intermediary", - "timeSeconds": 1.003625226, - "uploadBytes": 0, - "downloadBytes": 123337581 - }, - { - "type": "intermediary", - "timeSeconds": 1.000033855, - "uploadBytes": 0, - "downloadBytes": 123967709 - }, - { - "type": "intermediary", - "timeSeconds": 1.000030517, - "uploadBytes": 0, - "downloadBytes": 124302108 - }, - { - "type": "intermediary", - "timeSeconds": 1.002319521, - "uploadBytes": 0, - "downloadBytes": 123156448 - }, - { - "type": "intermediary", - "timeSeconds": 1.00000386, - "uploadBytes": 0, - "downloadBytes": 123893719 - }, - { - "type": "intermediary", - "timeSeconds": 1.000061467, - "uploadBytes": 0, - "downloadBytes": 125176035 - }, - { - "type": "intermediary", - "timeSeconds": 1.002698267, - "uploadBytes": 0, - "downloadBytes": 122485915 - }, - { - "type": "intermediary", - "timeSeconds": 1.001759214, - "uploadBytes": 0, - "downloadBytes": 55925539 - }, - { - "type": "intermediary", - "timeSeconds": 1.014771282, - "uploadBytes": 0, - "downloadBytes": 123725550 - }, - { - "type": "intermediary", - "timeSeconds": 1.001515511, - "uploadBytes": 0, - "downloadBytes": 123737347 - }, - { - "type": "intermediary", - "timeSeconds": 1.002075405, - "uploadBytes": 0, - "downloadBytes": 121268390 - }, - { - "type": "intermediary", - "timeSeconds": 1.001114124, - "uploadBytes": 0, - "downloadBytes": 123826639 - }, - { - "type": "intermediary", - "timeSeconds": 1.000280107, - "uploadBytes": 0, - "downloadBytes": 95745017 - }, - { - "type": "intermediary", - "timeSeconds": 1.000165847, - "uploadBytes": 0, - "downloadBytes": 106631302 - }, - { - "type": "intermediary", - "timeSeconds": 1.009725839, - "uploadBytes": 0, - "downloadBytes": 108131848 - }, - { - "type": "intermediary", - "timeSeconds": 1.000026661, - "uploadBytes": 0, - "downloadBytes": 108275272 - }, - { - "type": "intermediary", - "timeSeconds": 1.000355246, - "uploadBytes": 0, - "downloadBytes": 107163771 - }, - { - "type": "intermediary", - "timeSeconds": 1.000234106, - "uploadBytes": 0, - "downloadBytes": 108363355 - }, - { - "type": "intermediary", - "timeSeconds": 1.000045878, - "uploadBytes": 0, - "downloadBytes": 107244705 - }, - { - "type": "intermediary", - "timeSeconds": 1.000035471, - "uploadBytes": 0, - "downloadBytes": 108764461 - }, - { - "type": "intermediary", - "timeSeconds": 1.000050141, - "uploadBytes": 0, - "downloadBytes": 107559798 - }, - { - "type": "intermediary", - "timeSeconds": 1.000008129, - "uploadBytes": 0, - "downloadBytes": 109018697 - }, - { - "type": "intermediary", - "timeSeconds": 1.000128153, - "uploadBytes": 0, - "downloadBytes": 108015991 - }, - { - "type": "intermediary", - "timeSeconds": 1.000020181, - "uploadBytes": 0, - "downloadBytes": 109372554 - }, - { - "type": "intermediary", - "timeSeconds": 1.000051744, - "uploadBytes": 0, - "downloadBytes": 108577686 - }, - { - "type": "intermediary", - "timeSeconds": 1.000023327, - "uploadBytes": 0, - "downloadBytes": 109549469 - }, - { - "type": "intermediary", - "timeSeconds": 1.000043681, - "uploadBytes": 0, - "downloadBytes": 59071231 - }, - { - "type": "intermediary", - "timeSeconds": 1.00003229, - "uploadBytes": 0, - "downloadBytes": 125213640 - }, - { - "type": "intermediary", - "timeSeconds": 1.000030333, - "uploadBytes": 0, - "downloadBytes": 124336575 - }, - { - "type": "intermediary", - "timeSeconds": 1.003874881, - "uploadBytes": 0, - "downloadBytes": 124297405 - }, - { - "type": "intermediary", - "timeSeconds": 1.01274089, - "uploadBytes": 0, - "downloadBytes": 126516176 - }, - { - "type": "intermediary", - "timeSeconds": 1.013162747, - "uploadBytes": 0, - "downloadBytes": 126505630 - }, - { - "type": "intermediary", - "timeSeconds": 1.014983863, - "uploadBytes": 0, - "downloadBytes": 126638112 - }, - { - "type": "intermediary", - "timeSeconds": 1.012622601, - "uploadBytes": 0, - "downloadBytes": 126454870 - }, - { - "type": "intermediary", - "timeSeconds": 1.012636853, - "uploadBytes": 0, - "downloadBytes": 126555397 - }, - { - "type": "intermediary", - "timeSeconds": 1.012662512, - "uploadBytes": 0, - "downloadBytes": 126487204 - }, - { - "type": "intermediary", - "timeSeconds": 1.012459104, - "uploadBytes": 0, - "downloadBytes": 126443950 - }, - { - "type": "intermediary", - "timeSeconds": 1.012090775, - "uploadBytes": 0, - "downloadBytes": 126472128 - }, - { - "type": "intermediary", - "timeSeconds": 1.012239024, - "uploadBytes": 0, - "downloadBytes": 126406525 - }, - { - "type": "intermediary", - "timeSeconds": 1.015416758, - "uploadBytes": 0, - "downloadBytes": 126679682 - }, - { - "type": "intermediary", - "timeSeconds": 1.011913915, - "uploadBytes": 0, - "downloadBytes": 126476044 - }, - { - "type": "intermediary", - "timeSeconds": 1.012749721, - "uploadBytes": 0, - "downloadBytes": 126384349 - }, - { - "type": "intermediary", - "timeSeconds": 1.013412636, - "uploadBytes": 0, - "downloadBytes": 126609910 - }, - { - "type": "intermediary", - "timeSeconds": 1.013723323, - "uploadBytes": 0, - "downloadBytes": 126328109 - }, - { - "type": "intermediary", - "timeSeconds": 1.015605416, - "uploadBytes": 0, - "downloadBytes": 126884491 - }, - { - "type": "intermediary", - "timeSeconds": 1.000051213, - "uploadBytes": 0, - "downloadBytes": 56843007 - }, - { - "type": "intermediary", - "timeSeconds": 1.005982067, - "uploadBytes": 0, - "downloadBytes": 122977224 - }, - { - "type": "intermediary", - "timeSeconds": 1.000030901, - "uploadBytes": 0, - "downloadBytes": 124505449 - }, - { - "type": "intermediary", - "timeSeconds": 1.000101142, - "uploadBytes": 0, - "downloadBytes": 122059728 - }, - { - "type": "intermediary", - "timeSeconds": 1.021435605, - "uploadBytes": 0, - "downloadBytes": 124927126 - }, - { - "type": "intermediary", - "timeSeconds": 1.000107504, - "uploadBytes": 0, - "downloadBytes": 125090628 - }, - { - "type": "intermediary", - "timeSeconds": 1.000004548, - "uploadBytes": 0, - "downloadBytes": 121505830 - }, - { - "type": "intermediary", - "timeSeconds": 1.022461067, - "uploadBytes": 0, - "downloadBytes": 125021112 - }, - { - "type": "intermediary", - "timeSeconds": 1.000008626, - "uploadBytes": 0, - "downloadBytes": 125488500 - }, - { - "type": "intermediary", - "timeSeconds": 1.000093261, - "uploadBytes": 0, - "downloadBytes": 121330947 - }, - { - "type": "intermediary", - "timeSeconds": 1.021930407, - "uploadBytes": 0, - "downloadBytes": 124823822 - }, - { - "type": "intermediary", - "timeSeconds": 1.00019541, - "uploadBytes": 0, - "downloadBytes": 109008620 - }, - { - "type": "intermediary", - "timeSeconds": 1.005043671, - "uploadBytes": 0, - "downloadBytes": 121551011 - }, - { - "type": "intermediary", - "timeSeconds": 1.000032017, - "uploadBytes": 0, - "downloadBytes": 125803812 - }, - { - "type": "intermediary", - "timeSeconds": 1.000033396, - "uploadBytes": 0, - "downloadBytes": 121068894 - }, - { - "type": "intermediary", - "timeSeconds": 1.021847139, - "uploadBytes": 0, - "downloadBytes": 124531045 - }, - { - "type": "intermediary", - "timeSeconds": 1.00015528, - "uploadBytes": 0, - "downloadBytes": 125571203 - }, - { - "type": "intermediary", - "timeSeconds": 1.000292391, - "uploadBytes": 0, - "downloadBytes": 120655994 - }, - { - "type": "intermediary", - "timeSeconds": 1.024062081, - "uploadBytes": 0, - "downloadBytes": 125426306 - }, - { - "type": "intermediary", - "timeSeconds": 1.004890637, - "uploadBytes": 0, - "downloadBytes": 58495137 - }, - { - "type": "intermediary", - "timeSeconds": 1.000218287, - "uploadBytes": 0, - "downloadBytes": 108271882 - }, - { - "type": "intermediary", - "timeSeconds": 1.013811699, - "uploadBytes": 0, - "downloadBytes": 118429458 - }, - { - "type": "intermediary", - "timeSeconds": 1.020452477, - "uploadBytes": 0, - "downloadBytes": 126555656 - }, - { - "type": "intermediary", - "timeSeconds": 1.020279046, - "uploadBytes": 0, - "downloadBytes": 126515917 - }, - { - "type": "intermediary", - "timeSeconds": 1.020221034, - "uploadBytes": 0, - "downloadBytes": 126558735 - }, - { - "type": "intermediary", - "timeSeconds": 1.018745778, - "uploadBytes": 0, - "downloadBytes": 126282241 - }, - { - "type": "intermediary", - "timeSeconds": 1.021603421, - "uploadBytes": 0, - "downloadBytes": 126619773 - }, - { - "type": "intermediary", - "timeSeconds": 1.019286999, - "uploadBytes": 0, - "downloadBytes": 126437015 - }, - { - "type": "intermediary", - "timeSeconds": 1.000140796, - "uploadBytes": 0, - "downloadBytes": 80862880 - }, - { - "type": "intermediary", - "timeSeconds": 1.000055053, - "uploadBytes": 0, - "downloadBytes": 75730334 - }, - { - "type": "intermediary", - "timeSeconds": 1.000049595, - "uploadBytes": 0, - "downloadBytes": 75745849 - }, - { - "type": "intermediary", - "timeSeconds": 1.005086585, - "uploadBytes": 0, - "downloadBytes": 77473101 - }, - { - "type": "intermediary", - "timeSeconds": 1.000064085, - "uploadBytes": 0, - "downloadBytes": 76888950 - }, - { - "type": "intermediary", - "timeSeconds": 1.000003268, - "uploadBytes": 0, - "downloadBytes": 76714838 - }, - { - "type": "intermediary", - "timeSeconds": 1.000014879, - "uploadBytes": 0, - "downloadBytes": 76781966 - }, - { - "type": "intermediary", - "timeSeconds": 1.00013819, - "uploadBytes": 0, - "downloadBytes": 77791223 - }, - { - "type": "intermediary", - "timeSeconds": 1.000034817, - "uploadBytes": 0, - "downloadBytes": 77821929 - }, - { - "type": "intermediary", - "timeSeconds": 1.000001644, - "uploadBytes": 0, - "downloadBytes": 56861346 - } - ], - "implementation": "go-libp2p", - "version": "v0.29", - "transportStack": "quic-v1" - }, - { - "result": [ - { - "type": "intermediary", - "timeSeconds": 1.000033632, - "uploadBytes": 0, - "downloadBytes": 30351360 - }, - { - "type": "intermediary", - "timeSeconds": 1.015075032, - "uploadBytes": 0, - "downloadBytes": 103866368 - }, - { - "type": "intermediary", - "timeSeconds": 1.037375053, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.037616224, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.035806581, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.029095208, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.030495331, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.035231512, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.033232267, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.039184074, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.029607326, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.025798384, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.037527551, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.034644641, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.036557194, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.036297531, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.034844738, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.039431217, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.039397273, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.000064519, - "uploadBytes": 0, - "downloadBytes": 33554432 - }, - { - "type": "intermediary", - "timeSeconds": 1.02374759, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.025047457, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.029654534, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.029656473, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024685546, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.030138432, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017751859, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020652238, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.029249314, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.030058636, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.02095999, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.031441016, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.019889885, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.022358316, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.01654488, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.027994365, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024655589, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.025704089, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.025681612, - "uploadBytes": 0, - "downloadBytes": 33554432 - }, - { - "type": "intermediary", - "timeSeconds": 1.058260201, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.005074242, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.000077475, - "uploadBytes": 0, - "downloadBytes": 109191168 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000132, - "uploadBytes": 0, - "downloadBytes": 109043700 - }, - { - "type": "intermediary", - "timeSeconds": 1.000228141, - "uploadBytes": 0, - "downloadBytes": 109387788 - }, - { - "type": "intermediary", - "timeSeconds": 1.001362353, - "uploadBytes": 0, - "downloadBytes": 108584960 - }, - { - "type": "intermediary", - "timeSeconds": 1.00423422, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.002111887, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.000455127, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.004336646, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.001205398, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.000146834, - "uploadBytes": 0, - "downloadBytes": 109649920 - }, - { - "type": "intermediary", - "timeSeconds": 1.008333597, - "uploadBytes": 0, - "downloadBytes": 108453888 - }, - { - "type": "intermediary", - "timeSeconds": 1.0011692700000001, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.000061359, - "uploadBytes": 0, - "downloadBytes": 102703104 - }, - { - "type": "intermediary", - "timeSeconds": 1.005963473, - "uploadBytes": 0, - "downloadBytes": 107012096 - }, - { - "type": "intermediary", - "timeSeconds": 1.005565407, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.000141157, - "uploadBytes": 0, - "downloadBytes": 109060096 - }, - { - "type": "intermediary", - "timeSeconds": 1.012190649, - "uploadBytes": 0, - "downloadBytes": 16777216 - }, - { - "type": "intermediary", - "timeSeconds": 1.010690101, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.006821416, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.002364971, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017294068, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.010943428, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.007195358, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.000087824, - "uploadBytes": 0, - "downloadBytes": 111091712 - }, - { - "type": "intermediary", - "timeSeconds": 1.006363981, - "uploadBytes": 0, - "downloadBytes": 107012096 - }, - { - "type": "intermediary", - "timeSeconds": 1.010551021, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.010623079, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.006183275, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016420257, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.009325635, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.002192238, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.007794616, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.006410415, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015119333, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.008854766, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024799177, - "uploadBytes": 0, - "downloadBytes": 25165824 - }, - { - "type": "intermediary", - "timeSeconds": 1.003562018, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.009558449, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.008564914, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.011723663, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.012282405, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015110446, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.00852623, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.004641609, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.014325178, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.010021427, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.000079386, - "uploadBytes": 0, - "downloadBytes": 109191168 - }, - { - "type": "intermediary", - "timeSeconds": 1.012556374, - "uploadBytes": 0, - "downloadBytes": 108912640 - }, - { - "type": "intermediary", - "timeSeconds": 1.007334153, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.012527663, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.013735796, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.012120774, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.010130041, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.010533548, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.042916145, - "uploadBytes": 0, - "downloadBytes": 16908288 - }, - { - "type": "intermediary", - "timeSeconds": 1.030380229, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.042673569, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.030470567, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.035955458, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.023682487, - "uploadBytes": 0, - "downloadBytes": 100663296 - }, - { - "type": "intermediary", - "timeSeconds": 1.03789143, - "uploadBytes": 0, - "downloadBytes": 92274688 - }, - { - "type": "intermediary", - "timeSeconds": 1.036438258, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.037769766, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.035724043, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.036576773, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.044932621, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.04012224, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.030970379, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.026075423, - "uploadBytes": 0, - "downloadBytes": 102244352 - }, - { - "type": "intermediary", - "timeSeconds": 1.009546822, - "uploadBytes": 0, - "downloadBytes": 65527808 - }, - { - "type": "intermediary", - "timeSeconds": 1.06274899, - "uploadBytes": 0, - "downloadBytes": 67108864 - }, - { - "type": "intermediary", - "timeSeconds": 1.062817069, - "uploadBytes": 0, - "downloadBytes": 67108864 - }, - { - "type": "intermediary", - "timeSeconds": 1.058042956, - "uploadBytes": 0, - "downloadBytes": 67108864 - }, - { - "type": "intermediary", - "timeSeconds": 1.000195604, - "uploadBytes": 0, - "downloadBytes": 34217984 - }, - { - "type": "intermediary", - "timeSeconds": 1.014946828, - "uploadBytes": 0, - "downloadBytes": 108388352 - }, - { - "type": "intermediary", - "timeSeconds": 1.023464023, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017032113, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017489895, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020914861, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015509549, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.023193621, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.013483972, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015719083, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015651276, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.021072745, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.01932857, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.022352683, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.019436011, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.027724644, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.022858873, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.023069328, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.012576933, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.039727459, - "uploadBytes": 0, - "downloadBytes": 25165824 - }, - { - "type": "intermediary", - "timeSeconds": 1.011097508, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024813225, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024928518, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.018517315, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.021950158, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.022617336, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016657949, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020172917, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020291346, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.017685617, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.021692247, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.028703832, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020856424, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.020903853, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015127942, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.023077263, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.019000547, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.019040408, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.012654562, - "uploadBytes": 0, - "downloadBytes": 14753792 - }, - { - "type": "intermediary", - "timeSeconds": 1.000050939, - "uploadBytes": 0, - "downloadBytes": 105971712 - }, - { - "type": "intermediary", - "timeSeconds": 1.003092671, - "uploadBytes": 0, - "downloadBytes": 105766912 - }, - { - "type": "intermediary", - "timeSeconds": 1.005871363, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.006318588, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.009769245, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015865437, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016489624, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.003626485, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016096499, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.011333342, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015188364, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.015945842, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.005296379, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.007856678, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.013252133, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.010794642, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.007800888, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.016573744, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.005795988, - "uploadBytes": 0, - "downloadBytes": 33554432 - }, - { - "type": "intermediary", - "timeSeconds": 1.016904472, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.031938007, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.032497733, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.025642853, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.028450496, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.028133771, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.028278333, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.028727732, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.029428914, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.025984059, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024086488, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.026087821, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024845825, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024824239, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.025075035, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.024453113, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.03046225, - "uploadBytes": 0, - "downloadBytes": 109051904 - }, - { - "type": "intermediary", - "timeSeconds": 1.027180643, - "uploadBytes": 0, - "downloadBytes": 109051904 - } - ], - "implementation": "go-libp2p", - "version": "v0.31", - "transportStack": "tcp" - }, - { - "result": [ - { - "type": "intermediary", - "timeSeconds": 1.015354392, - "uploadBytes": 0, - "downloadBytes": 48948849 - }, - { - "type": "intermediary", - "timeSeconds": 1.000070721, - "uploadBytes": 0, - "downloadBytes": 75351117 - }, - { - "type": "intermediary", - "timeSeconds": 1.000427299, - "uploadBytes": 0, - "downloadBytes": 74126581 - }, - { - "type": "intermediary", - "timeSeconds": 1.000194304, - "uploadBytes": 0, - "downloadBytes": 74263843 - }, - { - "type": "intermediary", - "timeSeconds": 1.000287244, - "uploadBytes": 0, - "downloadBytes": 75215320 - }, - { - "type": "intermediary", - "timeSeconds": 1.000123041, - "uploadBytes": 0, - "downloadBytes": 74879716 - }, - { - "type": "intermediary", - "timeSeconds": 1.000117479, - "uploadBytes": 0, - "downloadBytes": 74830832 - }, - { - "type": "intermediary", - "timeSeconds": 1.000116298, - "uploadBytes": 0, - "downloadBytes": 75871673 - }, - { - "type": "intermediary", - "timeSeconds": 1.0001703, - "uploadBytes": 0, - "downloadBytes": 75438727 - }, - { - "type": "intermediary", - "timeSeconds": 1.000201701, - "uploadBytes": 0, - "downloadBytes": 75698578 - }, - { - "type": "intermediary", - "timeSeconds": 1.000105637, - "uploadBytes": 0, - "downloadBytes": 76331110 - }, - { - "type": "intermediary", - "timeSeconds": 1.000237797, - "uploadBytes": 0, - "downloadBytes": 76246300 - }, - { - "type": "intermediary", - "timeSeconds": 1.000121701, - "uploadBytes": 0, - "downloadBytes": 76416386 - }, - { - "type": "intermediary", - "timeSeconds": 1.000078823, - "uploadBytes": 0, - "downloadBytes": 77156556 - }, - { - "type": "intermediary", - "timeSeconds": 1.000104625, - "uploadBytes": 0, - "downloadBytes": 76566822 - }, - { - "type": "intermediary", - "timeSeconds": 1.000289122, - "uploadBytes": 0, - "downloadBytes": 77060738 - }, - { - "type": "intermediary", - "timeSeconds": 1.00017657, - "uploadBytes": 0, - "downloadBytes": 77611496 - }, - { - "type": "intermediary", - "timeSeconds": 1.000232412, - "uploadBytes": 0, - "downloadBytes": 77088068 - }, - { - "type": "intermediary", - "timeSeconds": 1.000382022, - "uploadBytes": 0, - "downloadBytes": 77996276 - }, - { - "type": "intermediary", - "timeSeconds": 1.000354654, - "uploadBytes": 0, - "downloadBytes": 51705519 - }, - { - "type": "intermediary", - "timeSeconds": 1.003405403, - "uploadBytes": 0, - "downloadBytes": 80263569 - }, - { - "type": "intermediary", - "timeSeconds": 1.000055557, - "uploadBytes": 0, - "downloadBytes": 74542364 - }, - { - "type": "intermediary", - "timeSeconds": 1.000148667, - "uploadBytes": 0, - "downloadBytes": 74556254 - }, - { - "type": "intermediary", - "timeSeconds": 1.000118117, - "uploadBytes": 0, - "downloadBytes": 74577160 - }, - { - "type": "intermediary", - "timeSeconds": 1.000266987, - "uploadBytes": 0, - "downloadBytes": 76061916 - }, - { - "type": "intermediary", - "timeSeconds": 1.000015213, - "uploadBytes": 0, - "downloadBytes": 75331616 - }, - { - "type": "intermediary", - "timeSeconds": 1.000060344, - "uploadBytes": 0, - "downloadBytes": 75632774 - }, - { - "type": "intermediary", - "timeSeconds": 1.000224261, - "uploadBytes": 0, - "downloadBytes": 76038671 - }, - { - "type": "intermediary", - "timeSeconds": 1.000002093, - "uploadBytes": 0, - "downloadBytes": 76830295 - }, - { - "type": "intermediary", - "timeSeconds": 1.000116989, - "uploadBytes": 0, - "downloadBytes": 76279665 - }, - { - "type": "intermediary", - "timeSeconds": 1.000065866, - "uploadBytes": 0, - "downloadBytes": 76834991 - }, - { - "type": "intermediary", - "timeSeconds": 1.000158076, - "uploadBytes": 0, - "downloadBytes": 77350533 - }, - { - "type": "intermediary", - "timeSeconds": 1.000008133, - "uploadBytes": 0, - "downloadBytes": 77524401 - }, - { - "type": "intermediary", - "timeSeconds": 1.000014299, - "uploadBytes": 0, - "downloadBytes": 77284978 - }, - { - "type": "intermediary", - "timeSeconds": 1.000039623, - "uploadBytes": 0, - "downloadBytes": 77846066 - }, - { - "type": "intermediary", - "timeSeconds": 1.000096979, - "uploadBytes": 0, - "downloadBytes": 78406053 - }, - { - "type": "intermediary", - "timeSeconds": 1.000022643, - "uploadBytes": 0, - "downloadBytes": 77909406 - }, - { - "type": "intermediary", - "timeSeconds": 1.000171011, - "uploadBytes": 0, - "downloadBytes": 78513787 - }, - { - "type": "intermediary", - "timeSeconds": 1.000280538, - "uploadBytes": 0, - "downloadBytes": 42298180 - }, - { - "type": "intermediary", - "timeSeconds": 1.000060543, - "uploadBytes": 0, - "downloadBytes": 107317012 - }, - { - "type": "intermediary", - "timeSeconds": 1.000460143, - "uploadBytes": 0, - "downloadBytes": 107939202 - }, - { - "type": "intermediary", - "timeSeconds": 1.000162006, - "uploadBytes": 0, - "downloadBytes": 107682430 - }, - { - "type": "intermediary", - "timeSeconds": 1.000038141, - "uploadBytes": 0, - "downloadBytes": 107668866 - }, - { - "type": "intermediary", - "timeSeconds": 1.007583022, - "uploadBytes": 0, - "downloadBytes": 89414340 - }, - { - "type": "intermediary", - "timeSeconds": 1.001468026, - "uploadBytes": 0, - "downloadBytes": 76172572 - }, - { - "type": "intermediary", - "timeSeconds": 1.001520688, - "uploadBytes": 0, - "downloadBytes": 76367770 - }, - { - "type": "intermediary", - "timeSeconds": 1.000064817, - "uploadBytes": 0, - "downloadBytes": 76541818 - }, - { - "type": "intermediary", - "timeSeconds": 1.000053379, - "uploadBytes": 0, - "downloadBytes": 76398056 - }, - { - "type": "intermediary", - "timeSeconds": 1.000151542, - "uploadBytes": 0, - "downloadBytes": 76488972 - }, - { - "type": "intermediary", - "timeSeconds": 1.000036043, - "uploadBytes": 0, - "downloadBytes": 76812422 - }, - { - "type": "intermediary", - "timeSeconds": 1.000064803, - "uploadBytes": 0, - "downloadBytes": 76957145 - }, - { - "type": "intermediary", - "timeSeconds": 1.000042596, - "uploadBytes": 0, - "downloadBytes": 76964035 - }, - { - "type": "intermediary", - "timeSeconds": 1.000056448, - "uploadBytes": 0, - "downloadBytes": 77431751 - }, - { - "type": "intermediary", - "timeSeconds": 1.000168825, - "uploadBytes": 0, - "downloadBytes": 77636511 - }, - { - "type": "intermediary", - "timeSeconds": 1.000160391, - "uploadBytes": 0, - "downloadBytes": 77831216 - }, - { - "type": "intermediary", - "timeSeconds": 1.000064932, - "uploadBytes": 0, - "downloadBytes": 78382706 - }, - { - "type": "intermediary", - "timeSeconds": 1.000016614, - "uploadBytes": 0, - "downloadBytes": 78152412 - }, - { - "type": "intermediary", - "timeSeconds": 1.000083743, - "uploadBytes": 0, - "downloadBytes": 42107018 - }, - { - "type": "intermediary", - "timeSeconds": 1.00302228, - "uploadBytes": 0, - "downloadBytes": 104742972 - }, - { - "type": "intermediary", - "timeSeconds": 1.000096253, - "uploadBytes": 0, - "downloadBytes": 105635304 - }, - { - "type": "intermediary", - "timeSeconds": 1.000185257, - "uploadBytes": 0, - "downloadBytes": 104361512 - }, - { - "type": "intermediary", - "timeSeconds": 1.000104896, - "uploadBytes": 0, - "downloadBytes": 106282472 - }, - { - "type": "intermediary", - "timeSeconds": 1.000078228, - "uploadBytes": 0, - "downloadBytes": 104647160 - }, - { - "type": "intermediary", - "timeSeconds": 1.000004648, - "uploadBytes": 0, - "downloadBytes": 106269514 - }, - { - "type": "intermediary", - "timeSeconds": 1.000292588, - "uploadBytes": 0, - "downloadBytes": 105446748 - }, - { - "type": "intermediary", - "timeSeconds": 1.00001963, - "uploadBytes": 0, - "downloadBytes": 106515006 - }, - { - "type": "intermediary", - "timeSeconds": 1.000111676, - "uploadBytes": 0, - "downloadBytes": 105826808 - }, - { - "type": "intermediary", - "timeSeconds": 1.000043034, - "uploadBytes": 0, - "downloadBytes": 106935325 - }, - { - "type": "intermediary", - "timeSeconds": 1.000095302, - "uploadBytes": 0, - "downloadBytes": 106169979 - }, - { - "type": "intermediary", - "timeSeconds": 1.000197036, - "uploadBytes": 0, - "downloadBytes": 107254068 - }, - { - "type": "intermediary", - "timeSeconds": 1.000300037, - "uploadBytes": 0, - "downloadBytes": 106338458 - }, - { - "type": "intermediary", - "timeSeconds": 1.000202428, - "uploadBytes": 0, - "downloadBytes": 107963091 - }, - { - "type": "intermediary", - "timeSeconds": 1.000226817, - "uploadBytes": 0, - "downloadBytes": 106917345 - }, - { - "type": "intermediary", - "timeSeconds": 1.000123353, - "uploadBytes": 0, - "downloadBytes": 108246950 - }, - { - "type": "intermediary", - "timeSeconds": 1.000134079, - "uploadBytes": 0, - "downloadBytes": 107255962 - }, - { - "type": "intermediary", - "timeSeconds": 1.000261892, - "uploadBytes": 0, - "downloadBytes": 108764989 - }, - { - "type": "intermediary", - "timeSeconds": 1.046552631, - "uploadBytes": 0, - "downloadBytes": 46536374 - }, - { - "type": "intermediary", - "timeSeconds": 1.000114908, - "uploadBytes": 0, - "downloadBytes": 78950022 - }, - { - "type": "intermediary", - "timeSeconds": 1.000202041, - "uploadBytes": 0, - "downloadBytes": 73047528 - }, - { - "type": "intermediary", - "timeSeconds": 1.000030818, - "uploadBytes": 0, - "downloadBytes": 73907420 - }, - { - "type": "intermediary", - "timeSeconds": 1.000045196, - "uploadBytes": 0, - "downloadBytes": 73437248 - }, - { - "type": "intermediary", - "timeSeconds": 1.000052458, - "uploadBytes": 0, - "downloadBytes": 74264710 - }, - { - "type": "intermediary", - "timeSeconds": 1.000026533, - "uploadBytes": 0, - "downloadBytes": 73994365 - }, - { - "type": "intermediary", - "timeSeconds": 1.000307304, - "uploadBytes": 0, - "downloadBytes": 74237055 - }, - { - "type": "intermediary", - "timeSeconds": 1.000054437, - "uploadBytes": 0, - "downloadBytes": 74885079 - }, - { - "type": "intermediary", - "timeSeconds": 1.00014887, - "uploadBytes": 0, - "downloadBytes": 74769535 - }, - { - "type": "intermediary", - "timeSeconds": 1.000165459, - "uploadBytes": 0, - "downloadBytes": 75300864 - }, - { - "type": "intermediary", - "timeSeconds": 1.000074714, - "uploadBytes": 0, - "downloadBytes": 75216322 - }, - { - "type": "intermediary", - "timeSeconds": 1.000116832, - "uploadBytes": 0, - "downloadBytes": 75886458 - }, - { - "type": "intermediary", - "timeSeconds": 1.000047336, - "uploadBytes": 0, - "downloadBytes": 75300596 - }, - { - "type": "intermediary", - "timeSeconds": 1.000159148, - "uploadBytes": 0, - "downloadBytes": 76664566 - }, - { - "type": "intermediary", - "timeSeconds": 1.000070054, - "uploadBytes": 0, - "downloadBytes": 75491848 - }, - { - "type": "intermediary", - "timeSeconds": 1.000095491, - "uploadBytes": 0, - "downloadBytes": 76872322 - }, - { - "type": "intermediary", - "timeSeconds": 1.0002607, - "uploadBytes": 0, - "downloadBytes": 76151417 - }, - { - "type": "intermediary", - "timeSeconds": 1.000129597, - "uploadBytes": 0, - "downloadBytes": 77209609 - }, - { - "type": "intermediary", - "timeSeconds": 1.000201425, - "uploadBytes": 0, - "downloadBytes": 42594649 - }, - { - "type": "intermediary", - "timeSeconds": 1.003538261, - "uploadBytes": 0, - "downloadBytes": 106775995 - }, - { - "type": "intermediary", - "timeSeconds": 1.000013014, - "uploadBytes": 0, - "downloadBytes": 107413236 - }, - { - "type": "intermediary", - "timeSeconds": 1.000044721, - "uploadBytes": 0, - "downloadBytes": 106482168 - }, - { - "type": "intermediary", - "timeSeconds": 1.000034782, - "uploadBytes": 0, - "downloadBytes": 106979864 - }, - { - "type": "intermediary", - "timeSeconds": 1.000270624, - "uploadBytes": 0, - "downloadBytes": 107109794 - }, - { - "type": "intermediary", - "timeSeconds": 1.000008289, - "uploadBytes": 0, - "downloadBytes": 108257280 - }, - { - "type": "intermediary", - "timeSeconds": 1.000072561, - "uploadBytes": 0, - "downloadBytes": 107295122 - }, - { - "type": "intermediary", - "timeSeconds": 1.000265696, - "uploadBytes": 0, - "downloadBytes": 107976270 - }, - { - "type": "intermediary", - "timeSeconds": 1.000030627, - "uploadBytes": 0, - "downloadBytes": 108392314 - }, - { - "type": "intermediary", - "timeSeconds": 1.000249761, - "uploadBytes": 0, - "downloadBytes": 108919630 - }, - { - "type": "intermediary", - "timeSeconds": 1.000278751, - "uploadBytes": 0, - "downloadBytes": 107996054 - }, - { - "type": "intermediary", - "timeSeconds": 1.00003575, - "uploadBytes": 0, - "downloadBytes": 108714626 - }, - { - "type": "intermediary", - "timeSeconds": 1.000172018, - "uploadBytes": 0, - "downloadBytes": 109068776 - }, - { - "type": "intermediary", - "timeSeconds": 1.000145719, - "uploadBytes": 0, - "downloadBytes": 109319672 - }, - { - "type": "intermediary", - "timeSeconds": 1.000120227, - "uploadBytes": 0, - "downloadBytes": 109325052 - }, - { - "type": "intermediary", - "timeSeconds": 1.000225217, - "uploadBytes": 0, - "downloadBytes": 109576436 - }, - { - "type": "intermediary", - "timeSeconds": 1.000152725, - "uploadBytes": 0, - "downloadBytes": 110291220 - }, - { - "type": "intermediary", - "timeSeconds": 1.000079436, - "uploadBytes": 0, - "downloadBytes": 110080796 - }, - { - "type": "intermediary", - "timeSeconds": 1.000208378, - "uploadBytes": 0, - "downloadBytes": 41828444 - }, - { - "type": "intermediary", - "timeSeconds": 1.008185459, - "uploadBytes": 0, - "downloadBytes": 104940493 - }, - { - "type": "intermediary", - "timeSeconds": 1.000160103, - "uploadBytes": 0, - "downloadBytes": 104892589 - }, - { - "type": "intermediary", - "timeSeconds": 1.00026467, - "uploadBytes": 0, - "downloadBytes": 104688458 - }, - { - "type": "intermediary", - "timeSeconds": 1.000164208, - "uploadBytes": 0, - "downloadBytes": 105377926 - }, - { - "type": "intermediary", - "timeSeconds": 1.000071028, - "uploadBytes": 0, - "downloadBytes": 105233628 - }, - { - "type": "intermediary", - "timeSeconds": 1.000379084, - "uploadBytes": 0, - "downloadBytes": 105629247 - }, - { - "type": "intermediary", - "timeSeconds": 1.000071215, - "uploadBytes": 0, - "downloadBytes": 105966349 - }, - { - "type": "intermediary", - "timeSeconds": 1.000064321, - "uploadBytes": 0, - "downloadBytes": 105737034 - }, - { - "type": "intermediary", - "timeSeconds": 1.000118432, - "uploadBytes": 0, - "downloadBytes": 106854432 - }, - { - "type": "intermediary", - "timeSeconds": 1.000132116, - "uploadBytes": 0, - "downloadBytes": 106034315 - }, - { - "type": "intermediary", - "timeSeconds": 1.000017567, - "uploadBytes": 0, - "downloadBytes": 106859699 - }, - { - "type": "intermediary", - "timeSeconds": 1.000136755, - "uploadBytes": 0, - "downloadBytes": 106306422 - }, - { - "type": "intermediary", - "timeSeconds": 1.000020311, - "uploadBytes": 0, - "downloadBytes": 107318988 - }, - { - "type": "intermediary", - "timeSeconds": 1.000024187, - "uploadBytes": 0, - "downloadBytes": 107027016 - }, - { - "type": "intermediary", - "timeSeconds": 1.000469199, - "uploadBytes": 0, - "downloadBytes": 107492856 - }, - { - "type": "intermediary", - "timeSeconds": 1.000146101, - "uploadBytes": 0, - "downloadBytes": 107452872 - }, - { - "type": "intermediary", - "timeSeconds": 1.000033935, - "uploadBytes": 0, - "downloadBytes": 108352958 - }, - { - "type": "intermediary", - "timeSeconds": 1.00004508, - "uploadBytes": 0, - "downloadBytes": 108081518 - }, - { - "type": "intermediary", - "timeSeconds": 1.017873069, - "uploadBytes": 0, - "downloadBytes": 52147756 - }, - { - "type": "intermediary", - "timeSeconds": 1.000100656, - "uploadBytes": 0, - "downloadBytes": 104275862 - }, - { - "type": "intermediary", - "timeSeconds": 1.000029772, - "uploadBytes": 0, - "downloadBytes": 104668042 - }, - { - "type": "intermediary", - "timeSeconds": 1.000099483, - "uploadBytes": 0, - "downloadBytes": 106271460 - }, - { - "type": "intermediary", - "timeSeconds": 1.0001028, - "uploadBytes": 0, - "downloadBytes": 105300574 - }, - { - "type": "intermediary", - "timeSeconds": 1.000199099, - "uploadBytes": 0, - "downloadBytes": 106202419 - }, - { - "type": "intermediary", - "timeSeconds": 1.000403472, - "uploadBytes": 0, - "downloadBytes": 105936203 - }, - { - "type": "intermediary", - "timeSeconds": 1.000095188, - "uploadBytes": 0, - "downloadBytes": 106553344 - }, - { - "type": "intermediary", - "timeSeconds": 1.000386098, - "uploadBytes": 0, - "downloadBytes": 106846240 - }, - { - "type": "intermediary", - "timeSeconds": 1.000010444, - "uploadBytes": 0, - "downloadBytes": 106912918 - }, - { - "type": "intermediary", - "timeSeconds": 1.000029479, - "uploadBytes": 0, - "downloadBytes": 107502264 - }, - { - "type": "intermediary", - "timeSeconds": 1.000069936, - "uploadBytes": 0, - "downloadBytes": 106807598 - }, - { - "type": "intermediary", - "timeSeconds": 1.000026496, - "uploadBytes": 0, - "downloadBytes": 107708846 - }, - { - "type": "intermediary", - "timeSeconds": 1.00040799, - "uploadBytes": 0, - "downloadBytes": 107077388 - }, - { - "type": "intermediary", - "timeSeconds": 1.000087292, - "uploadBytes": 0, - "downloadBytes": 108397950 - }, - { - "type": "intermediary", - "timeSeconds": 1.00013594, - "uploadBytes": 0, - "downloadBytes": 107961694 - }, - { - "type": "intermediary", - "timeSeconds": 1.000083704, - "uploadBytes": 0, - "downloadBytes": 108413407 - }, - { - "type": "intermediary", - "timeSeconds": 1.000045863, - "uploadBytes": 0, - "downloadBytes": 108624709 - }, - { - "type": "intermediary", - "timeSeconds": 1.000167099, - "uploadBytes": 0, - "downloadBytes": 108721412 - }, - { - "type": "intermediary", - "timeSeconds": 1.00220074, - "uploadBytes": 0, - "downloadBytes": 48640069 - }, - { - "type": "intermediary", - "timeSeconds": 1.000406356, - "uploadBytes": 0, - "downloadBytes": 107235291 - }, - { - "type": "intermediary", - "timeSeconds": 1.000269773, - "uploadBytes": 0, - "downloadBytes": 106629892 - }, - { - "type": "intermediary", - "timeSeconds": 1.000106729, - "uploadBytes": 0, - "downloadBytes": 106768282 - }, - { - "type": "intermediary", - "timeSeconds": 1.00019056, - "uploadBytes": 0, - "downloadBytes": 107149682 - }, - { - "type": "intermediary", - "timeSeconds": 1.000377573, - "uploadBytes": 0, - "downloadBytes": 107600501 - }, - { - "type": "intermediary", - "timeSeconds": 1.000081037, - "uploadBytes": 0, - "downloadBytes": 108466042 - }, - { - "type": "intermediary", - "timeSeconds": 1.000071889, - "uploadBytes": 0, - "downloadBytes": 107692845 - }, - { - "type": "intermediary", - "timeSeconds": 1.000028631, - "uploadBytes": 0, - "downloadBytes": 108019971 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000415, - "uploadBytes": 0, - "downloadBytes": 108057057 - }, - { - "type": "intermediary", - "timeSeconds": 1.000002027, - "uploadBytes": 0, - "downloadBytes": 108804212 - }, - { - "type": "intermediary", - "timeSeconds": 1.000204754, - "uploadBytes": 0, - "downloadBytes": 108860618 - }, - { - "type": "intermediary", - "timeSeconds": 1.000062716, - "uploadBytes": 0, - "downloadBytes": 108766160 - }, - { - "type": "intermediary", - "timeSeconds": 1.00008422, - "uploadBytes": 0, - "downloadBytes": 109407402 - }, - { - "type": "intermediary", - "timeSeconds": 1.000057259, - "uploadBytes": 0, - "downloadBytes": 109259516 - }, - { - "type": "intermediary", - "timeSeconds": 1.000003736, - "uploadBytes": 0, - "downloadBytes": 109445364 - }, - { - "type": "intermediary", - "timeSeconds": 1.000052299, - "uploadBytes": 0, - "downloadBytes": 110062820 - }, - { - "type": "intermediary", - "timeSeconds": 1.000015754, - "uploadBytes": 0, - "downloadBytes": 110673676 - }, - { - "type": "intermediary", - "timeSeconds": 1.000217168, - "uploadBytes": 0, - "downloadBytes": 109923556 - }, - { - "type": "intermediary", - "timeSeconds": 1.000448942, - "uploadBytes": 0, - "downloadBytes": 41342554 - }, - { - "type": "intermediary", - "timeSeconds": 1.000000731, - "uploadBytes": 0, - "downloadBytes": 105939328 - }, - { - "type": "intermediary", - "timeSeconds": 1.000139189, - "uploadBytes": 0, - "downloadBytes": 107805112 - }, - { - "type": "intermediary", - "timeSeconds": 1.00002061, - "uploadBytes": 0, - "downloadBytes": 106310940 - }, - { - "type": "intermediary", - "timeSeconds": 1.000065376, - "uploadBytes": 0, - "downloadBytes": 106458655 - }, - { - "type": "intermediary", - "timeSeconds": 1.000197083, - "uploadBytes": 0, - "downloadBytes": 106801129 - }, - { - "type": "intermediary", - "timeSeconds": 1.000131094, - "uploadBytes": 0, - "downloadBytes": 108159780 - }, - { - "type": "intermediary", - "timeSeconds": 1.000100133, - "uploadBytes": 0, - "downloadBytes": 107231672 - }, - { - "type": "intermediary", - "timeSeconds": 1.000266364, - "uploadBytes": 0, - "downloadBytes": 107536116 - }, - { - "type": "intermediary", - "timeSeconds": 1.000045623, - "uploadBytes": 0, - "downloadBytes": 108072141 - }, - { - "type": "intermediary", - "timeSeconds": 1.000068481, - "uploadBytes": 0, - "downloadBytes": 108531357 - }, - { - "type": "intermediary", - "timeSeconds": 1.00014961, - "uploadBytes": 0, - "downloadBytes": 108417634 - }, - { - "type": "intermediary", - "timeSeconds": 1.000300883, - "uploadBytes": 0, - "downloadBytes": 108463242 - }, - { - "type": "intermediary", - "timeSeconds": 1.000106458, - "uploadBytes": 0, - "downloadBytes": 108764452 - }, - { - "type": "intermediary", - "timeSeconds": 1.000129179, - "uploadBytes": 0, - "downloadBytes": 109024330 - }, - { - "type": "intermediary", - "timeSeconds": 1.000033354, - "uploadBytes": 0, - "downloadBytes": 109226016 - }, - { - "type": "intermediary", - "timeSeconds": 1.000046229, - "uploadBytes": 0, - "downloadBytes": 107360622 - }, - { - "type": "intermediary", - "timeSeconds": 1.004248245, - "uploadBytes": 0, - "downloadBytes": 76322726 - }, - { - "type": "intermediary", - "timeSeconds": 1.000107944, - "uploadBytes": 0, - "downloadBytes": 78134378 - } - ], - "implementation": "go-libp2p", - "version": "v0.31", - "transportStack": "quic-v1" - }, - { - "result": [ - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 35192820 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 205848576 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 234356748 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 231866356 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 240189452 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 236978176 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 239337472 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 238747648 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 238813184 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 239075316 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 238747660 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237895680 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 240123892 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 0, - "downloadBytes": 239140876 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 239337472 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 239665152 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 226689024 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 240254976 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 1572852 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 169541644 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 233766900 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 226492428 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 234487808 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 236060672 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 234618868 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 233242636 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 232062976 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 234291200 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 232849408 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 234487808 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 235536384 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 232718324 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 235536384 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 233963532 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 232718336 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 0, - "downloadBytes": 230424576 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 19070964 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 213516300 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 235339776 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237699072 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237109248 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237436928 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 238157824 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 236781568 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 239140864 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 228261888 - }, - { - "type": "intermediary", - "timeSeconds": 1.007, - "uploadBytes": 0, - "downloadBytes": 229900288 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 226361344 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237305844 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 238288908 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 238682112 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 239206400 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 238354432 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237043712 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 34209792 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 220594176 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 235732980 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 232521740 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 238354432 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 238944256 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 238551040 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 239075328 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 238878720 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 0, - "downloadBytes": 238878720 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237764608 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237109248 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237305856 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 236847092 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237371392 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237043724 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 0, - "downloadBytes": 238288896 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237371392 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 28704768 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 214499328 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 236322816 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 240975872 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 241106944 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 239468544 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 240779264 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 239992832 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 240713728 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 241827840 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237961216 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 239468532 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 240975884 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 240910336 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 240254976 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 240254964 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 0, - "downloadBytes": 240779276 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 240320500 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 39911424 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 215220224 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 0, - "downloadBytes": 243269632 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 239075328 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 229965824 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 241106944 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 242286592 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 240517120 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 0, - "downloadBytes": 241958912 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 240910336 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 242417664 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 240189440 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 242352116 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 240844812 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 0, - "downloadBytes": 242286592 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 0, - "downloadBytes": 243007488 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 241369088 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 240779264 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 37814260 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 204668940 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 228720640 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 233504768 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 238157824 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 235667456 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237109248 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 236126208 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 236453888 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 239992832 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237240320 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 239796224 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237830144 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 239730688 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 229769216 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 238419968 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237174784 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237502464 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 30081024 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 206897152 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 213581824 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 233897984 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 223281152 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 234422272 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 233046016 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 0, - "downloadBytes": 234029056 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 231800832 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 233832448 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 234160128 - }, - { - "type": "intermediary", - "timeSeconds": 1.003, - "uploadBytes": 0, - "downloadBytes": 233504768 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 232914944 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 233111552 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 233242624 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 234225664 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 231931904 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 233635840 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 35454964 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 204341260 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 217579520 - }, - { - "type": "intermediary", - "timeSeconds": 1.005, - "uploadBytes": 0, - "downloadBytes": 232718336 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 233439232 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 224002048 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 235864052 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 236519436 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 231931904 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 235470836 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 234487820 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 236781568 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 235405312 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 234160128 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 234684416 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 235929600 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 235732980 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 235929600 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 36110324 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 211877888 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237830156 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 235864064 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 235864064 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 233111540 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 232390668 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 236322816 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 236519424 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 236978176 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 236716032 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237764608 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 234029056 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237043700 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237371392 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 236322816 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237633548 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 236388352 - } - ], - "implementation": "js-libp2p", - "version": "v0.46", - "transportStack": "tcp" - }, - { - "result": [ - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 47775744 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 231276532 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 247398400 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 243531788 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 255328256 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 239927296 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 242417652 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 244973580 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 253493236 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 256901132 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 251002868 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 256114700 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 256704512 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 257425396 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 254410764 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 257622016 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 247791616 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 257818624 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 246480896 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 59965440 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 233046016 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 247332864 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 257884160 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 236453888 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 250544128 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237436916 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 235470860 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 244187136 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 259915776 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 260112372 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 257884160 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 245497868 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 245039104 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 240582656 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 230948864 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 231079924 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 230621196 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 235536384 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 44171264 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 212271092 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 246939660 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 232062976 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 258998272 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 252313588 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 258670592 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 259850252 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 256573428 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 230817804 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 257884160 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 226885632 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 247201792 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 253165568 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 260046848 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237830144 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 236519424 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 257425408 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 247398400 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 41943028 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 207945728 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 248905740 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 249757696 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 247594996 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 235405324 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 222232564 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 216268812 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 222035968 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 226492416 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 242221056 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 220266496 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 225116160 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 221511680 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 230621184 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 240582644 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 251527180 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 252182528 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 233897984 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 45809652 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 224002060 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 249364480 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 232259584 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 251920384 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 228655104 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 256311296 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 255393792 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 255787008 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 249233396 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 255328268 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 256245748 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 254541836 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 255852544 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 255524852 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 255524876 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 256835584 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 256507904 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 257425408 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 50135040 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 243990528 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 256704512 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 248315904 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 257949696 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 258211840 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 260243444 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 257818636 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 259784704 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 258473984 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 236126208 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 256114688 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 258801664 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 250085376 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237699072 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 258539508 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 257622016 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 257687564 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 257097728 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 12582912 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 199950336 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 241303552 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 251854836 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 255197196 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 245563392 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 247463936 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 249954304 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 243204096 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 250216448 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 255918080 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 244514816 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 233177088 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 233635840 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 252903424 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 254869504 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 238223360 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 252051456 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 253755392 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 14614528 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 212729856 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 243728384 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 219480064 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 213188608 - }, - { - "type": "intermediary", - "timeSeconds": 1.032, - "uploadBytes": 0, - "downloadBytes": 166920192 - }, - { - "type": "intermediary", - "timeSeconds": 1.019, - "uploadBytes": 0, - "downloadBytes": 128057344 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 121438208 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 0, - "downloadBytes": 99811328 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 63766528 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 0, - "downloadBytes": 66781184 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 68681728 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 53805056 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 51773440 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 55115776 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 55377920 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 57868288 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 0, - "downloadBytes": 57737216 - }, - { - "type": "intermediary", - "timeSeconds": 1.002, - "uploadBytes": 0, - "downloadBytes": 59113472 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 22020096 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 211419136 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 253820928 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 254148596 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 254738444 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 254148596 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 240058380 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 231866368 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 235208704 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 236584960 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 238288896 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 239861748 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 237961228 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 242024448 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 244318208 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 244711424 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 240451572 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 253296640 - }, - { - "type": "intermediary", - "timeSeconds": 1.001, - "uploadBytes": 0, - "downloadBytes": 250478592 - }, - { - "type": "intermediary", - "timeSeconds": 1.043, - "uploadBytes": 0, - "downloadBytes": 14876672 - }, - { - "type": "intermediary", - "timeSeconds": 1.042, - "uploadBytes": 0, - "downloadBytes": 12189696 - }, - { - "type": "intermediary", - "timeSeconds": 1.041, - "uploadBytes": 0, - "downloadBytes": 3604480 - }, - { - "type": "intermediary", - "timeSeconds": 1.044, - "uploadBytes": 0, - "downloadBytes": 1835008 - }, - { - "type": "intermediary", - "timeSeconds": 1.084, - "uploadBytes": 0, - "downloadBytes": 917504 - }, - { - "type": "intermediary", - "timeSeconds": 1.039, - "uploadBytes": 0, - "downloadBytes": 786432 - }, - { - "type": "intermediary", - "timeSeconds": 1.06, - "uploadBytes": 0, - "downloadBytes": 589824 - }, - { - "type": "intermediary", - "timeSeconds": 1.017, - "uploadBytes": 0, - "downloadBytes": 458752 - }, - { - "type": "intermediary", - "timeSeconds": 1.038, - "uploadBytes": 0, - "downloadBytes": 393216 - }, - { - "type": "intermediary", - "timeSeconds": 1.043, - "uploadBytes": 0, - "downloadBytes": 524288 - }, - { - "type": "intermediary", - "timeSeconds": 1.046, - "uploadBytes": 0, - "downloadBytes": 524288 - }, - { - "type": "intermediary", - "timeSeconds": 1.039, - "uploadBytes": 0, - "downloadBytes": 655360 - }, - { - "type": "intermediary", - "timeSeconds": 1.129, - "uploadBytes": 0, - "downloadBytes": 655360 - }, - { - "type": "intermediary", - "timeSeconds": 1.096, - "uploadBytes": 0, - "downloadBytes": 458752 - }, - { - "type": "intermediary", - "timeSeconds": 1.103, - "uploadBytes": 0, - "downloadBytes": 589824 - }, - { - "type": "intermediary", - "timeSeconds": 1.082, - "uploadBytes": 0, - "downloadBytes": 786432 - }, - { - "type": "intermediary", - "timeSeconds": 1.063, - "uploadBytes": 0, - "downloadBytes": 983040 - }, - { - "type": "intermediary", - "timeSeconds": 1.018, - "uploadBytes": 0, - "downloadBytes": 983040 - } - ], - "implementation": "js-libp2p", - "version": "v1.0", - "transportStack": "tcp" - } - ], - "parameters": { - "uploadBytes": 0, - "downloadBytes": 9007199254740991 - } - }, - { - "name": "Connection establishment + 1 byte round trip latencies", - "unit": "s", - "results": [ - { - "result": [ - { - "type": "final", - "timeSeconds": 0.128343087, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130521631, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.128326765, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.132573153, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130716666, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130933333, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130197415, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131077361, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129216246, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129237699, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130487486, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.128165388, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.1284517, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.128915479, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.132024243, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.128315511, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129392202, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129570551, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131331524, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130806575, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129935295, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131980317, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.1304054, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130866883, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.127293364, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.132426725, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.127885606, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129532737, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.132093963, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.12977185, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.132093068, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130590053, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131366129, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.13266006, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129052693, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131545254, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131332799, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129630176, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131237743, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.132574179, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130714072, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129139695, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129442893, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130550061, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130130452, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.12907997, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131721423, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130519397, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130888495, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129024874, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130679333, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.128638237, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130456556, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129046767, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.132805476, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130689668, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.128100997, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131539494, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.127909969, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129486645, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130869378, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130835509, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.13079605, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.127666962, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130280237, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130937889, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130848246, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129655799, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.127449611, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131333163, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.12826608, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.127079674, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.128958795, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130965137, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130435633, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131159495, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130321128, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.132251214, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.127124269, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131277732, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131491103, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129387966, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129389286, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129781959, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.128002149, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.132286385, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.127099165, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129174967, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130708699, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.12844316, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131133236, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.127939361, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.132064935, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.127671817, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.128097085, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130216165, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129593039, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.128999921, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129258257, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130253135, - "uploadBytes": 1, - "downloadBytes": 1 - } - ], - "implementation": "quic-go", - "version": "v0.34", - "transportStack": "quic-v1" - }, - { - "result": [ - { - "type": "final", - "timeSeconds": 0.19142786, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190743846, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191321468, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195972127, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190203502, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192745619, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192019662, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194264711, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194482035, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.298327599, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193509954, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194109386, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19117623, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191274782, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191355594, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190740583, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.188139319, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194170452, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192720163, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193964518, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196622749, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19194654, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191707644, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194787998, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193519229, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192074706, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190223043, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194798021, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19224633, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194710455, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194349706, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196076612, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190029258, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191105886, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193901002, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191764395, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190684633, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192982827, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193854867, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194469746, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192150515, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197288085, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192616027, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190639939, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19423282, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191663338, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19674134, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190943353, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191017904, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196149132, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195941315, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195676073, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192178823, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192622709, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194391199, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192831476, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191979723, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191488044, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195393922, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192730466, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.18920396, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194652842, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193034762, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196652831, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.188700802, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192193377, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19404999, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194460684, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192283242, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191765528, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192307835, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194128929, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193892862, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192473152, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193878854, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197269752, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193562478, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193929998, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191710204, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193939779, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.189501038, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191693796, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.189989713, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194212, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191277575, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192730668, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193040418, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194888635, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192614155, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194508832, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195920667, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195763468, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195791684, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193326933, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193426629, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195357239, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194502062, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192046407, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196687212, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191986613, - "uploadBytes": 1, - "downloadBytes": 1 - } - ], - "implementation": "rust-libp2p", - "version": "v0.53", - "transportStack": "tcp" - }, - { - "result": [ - { - "type": "final", - "timeSeconds": 0.130974927, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131811355, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130557768, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129528697, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.13026386, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.127713715, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129250657, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130645752, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.128818029, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129120578, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.132295162, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130879379, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.128154537, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129652796, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130855318, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129234473, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131443673, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131892406, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129884229, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130884129, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129614115, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130729495, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129835966, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129437815, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129522574, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129678815, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129893878, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130568128, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129150451, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.128371687, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131060554, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.128882156, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.1311233, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130530838, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129906573, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130785389, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130575197, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.128586448, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129465847, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130310112, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.12815283, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.128047885, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131474487, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.126984494, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.126759239, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131316829, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.128041322, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131467512, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.128878805, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.127366921, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.13095575, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.13050965, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.128511421, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.127806579, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130001344, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130769932, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130813479, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129501791, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.12853103, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.132240738, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.12933532, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131872793, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131030002, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.12927217, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129500757, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130811717, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.132193148, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131285564, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129562039, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.13130582, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129583107, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.13052522, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.127028685, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129099865, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.13116874, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129528324, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129868303, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129450418, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129752834, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130189113, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130052305, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.12925132, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129653219, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.132207094, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131771574, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131603126, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.128988544, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.127752785, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130351875, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.12778842, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130926166, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130355751, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.128055673, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129636134, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.126697722, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.131088134, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130218042, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.129263193, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.128537403, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.130372153, - "uploadBytes": 1, - "downloadBytes": 1 - } - ], - "implementation": "rust-libp2p", - "version": "v0.53", - "transportStack": "quic-v1" - }, - { - "result": [ - { - "type": "final", - "timeSeconds": 0.195063378, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.189689534, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193113055, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191524089, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.187607051, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.189835266, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.188026397, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.188122291, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.187476356, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192339143, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192938816, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.187520943, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190144532, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.189007227, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.1878309, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191349196, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190016752, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192153478, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.187883739, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195724481, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193037908, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.18912767, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.187537866, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193247511, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192656813, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192211515, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193062598, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194839385, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.189996652, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192260637, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19155099, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.187113428, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19397191, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191749872, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19441131, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.189554405, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194449491, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.187522613, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193875488, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193907645, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.187608891, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19506853, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190707443, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.189547589, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193971412, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194330012, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194167307, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191289576, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192310322, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192104272, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.189660306, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191905351, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192030341, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191587644, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193290333, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191746603, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193732182, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194208894, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192291246, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192560476, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192541026, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192924941, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191319633, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193996524, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192397305, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.189605276, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.187752638, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.189222445, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191625473, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193369072, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19006728, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.18763561, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.189696006, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195443698, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190004368, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.189863833, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192134504, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193338092, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192047528, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.189098178, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192197434, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195558328, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192899383, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.187516465, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.187555691, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192248199, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190338596, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190019027, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190248727, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190091205, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.188047791, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.189043087, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.187690259, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191635247, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194561267, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191221573, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192991461, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.189254518, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.189877121, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192622639, - "uploadBytes": 1, - "downloadBytes": 1 - } - ], - "implementation": "https", - "version": "v0.1", - "transportStack": "tcp" - }, - { - "result": [ - { - "type": "final", - "timeSeconds": 0.314438154, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.374478688, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.324804593, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.385122677, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.318490161, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.382594716, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.379384327, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.381391604, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.382509487, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.31875286, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.324119458, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.380095235, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.386447297, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.385138086, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.376149071, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.376983488, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.375129874, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.323839036, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.386844588, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383751654, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.375488201, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.324065732, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.382991738, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.38970642, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.320266396, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.319228846, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384006707, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.386804107, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.323865958, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.313831548, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.316158696, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.379000772, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.321316675, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.382082502, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.317023249, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.317759638, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.318242831, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.319851305, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383613408, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.379959658, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.382604076, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.32145274, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.389660956, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.380023226, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384158991, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.379624196, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383886627, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384722861, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.38476697, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.313654317, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.324381992, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.387648003, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.389035089, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.320098842, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.315906592, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.316992844, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.376236099, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.37924643, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.379533767, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.320470565, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.374422184, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.37474461, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.314708876, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.382420384, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.374074439, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.318462716, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.388660948, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.385976636, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383947328, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.385494845, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384119024, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.380163446, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383085473, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.320864981, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.375104373, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.389628832, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.386745156, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.380431233, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.321031948, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.374788969, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.323246396, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.31751263, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.379828275, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.387867842, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.321691367, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.313375767, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.388338253, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.319006287, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383144396, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.377967738, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.37907459, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.319723548, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.385585448, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.378907241, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.38093267, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.312707025, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383210748, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.380440762, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.380594856, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.379213548, - "uploadBytes": 1, - "downloadBytes": 1 - } - ], - "implementation": "go-libp2p", - "version": "v0.27", - "transportStack": "tcp" - }, - { - "result": [ - { - "type": "final", - "timeSeconds": 0.197096588, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193489362, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.198688828, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195208019, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194164263, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.199788673, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191782232, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192853261, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193290634, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193973391, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196324418, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19368277, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194465733, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195709304, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195860528, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193213928, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19352252, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193386739, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19097817, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192883245, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190851591, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191896253, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193471059, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195519237, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193803244, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196741413, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193244877, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19850269, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196924431, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19502637, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197942614, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193044802, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.1941203, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196931646, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19360131, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194234487, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19889434, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190971751, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19846159, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193976913, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.198979562, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196039253, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195625227, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195082866, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196330478, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197073299, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19127511, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19356839, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197344009, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197917994, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197056624, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197108151, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195136812, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.198620848, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193558184, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193089071, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191534189, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190977204, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19405978, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194966474, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19386685, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193040196, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.198553095, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195665115, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196264267, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193133937, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196153164, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196335442, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194625795, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195959517, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195088758, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195609303, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194210331, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193228118, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193405475, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193417897, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192934724, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197619301, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193113211, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194479936, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197400386, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195890867, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194115728, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195701424, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193204401, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193879365, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195384869, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192886188, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196746506, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193489294, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196806191, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.189938985, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195316345, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192766061, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190763112, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193184101, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19442638, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197701381, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192847549, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196526265, - "uploadBytes": 1, - "downloadBytes": 1 - } - ], - "implementation": "go-libp2p", - "version": "v0.27", - "transportStack": "quic-v1" - }, - { - "result": [ - { - "type": "final", - "timeSeconds": 0.322668845, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.320086997, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383718188, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.31490516, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.318145325, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.379687734, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.388534936, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.385968048, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.389593586, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.382439878, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.317881406, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.316881109, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.319764848, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.38115086, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.379385378, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.378793803, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.316601734, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.380504348, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.38540034, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.319352914, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.388933093, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383656839, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.38502105, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384802968, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383789825, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.375256857, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.313932514, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.379661176, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.374428586, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.317299142, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.321792382, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.324859887, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.378219872, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384811453, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.379994256, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.316806864, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.374681763, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.3201433, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.386003473, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383162582, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.378012716, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.317997326, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.322079356, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.378517575, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.317696459, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.37447321, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.382011309, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.382016585, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.380608909, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.377451545, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.374790994, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.381671631, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.314638249, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384476537, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.388576093, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.382000845, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.385426222, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.31968565, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.322600574, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.389767639, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.38770447, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.389565995, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.38012887, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.321113533, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.375179983, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.379968296, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.31949317, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.385937567, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.324455809, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.317004897, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.37898756, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.319792098, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384683892, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.388081159, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.313350567, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.39004183, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384474391, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.387635534, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.320094035, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.385736685, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383716817, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.317549249, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.379551931, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.388787787, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.374854478, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.378550885, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.38845879, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.378888881, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.3185385, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.380371457, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383636023, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383869519, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.321305315, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.380142037, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.323107793, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.320835089, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.375692412, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384832561, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.321433393, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.317934074, - "uploadBytes": 1, - "downloadBytes": 1 - } - ], - "implementation": "go-libp2p", - "version": "v0.28", - "transportStack": "tcp" - }, - { - "result": [ - { - "type": "final", - "timeSeconds": 0.190841825, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195182034, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192715878, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193453156, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195340983, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196086238, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197430817, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196302374, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19375474, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190840196, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191931083, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194798852, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196190229, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193808363, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.1949314, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193133724, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.198261356, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191196181, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192719183, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190983943, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195375454, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193037484, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195301042, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195075679, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196724327, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195600312, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196020091, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.198828633, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194948212, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194740653, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195126557, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193958533, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190922809, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193336735, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194360397, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193864277, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195372409, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19730461, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19519285, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195931305, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194529148, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196170681, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195893999, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195917668, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195277822, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19547396, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193885864, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193074671, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195346109, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192213992, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195648474, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191990765, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192720102, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195969928, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195688285, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196835461, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.198756698, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196522545, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192939288, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193054254, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193466205, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19791895, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190544913, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190744655, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19602288, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194863579, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195579213, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194112326, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193510272, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195570122, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190880711, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195344629, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197417903, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195580123, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191156869, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194312027, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19488414, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195639515, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197476337, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190690953, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190730296, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19619574, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196416648, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194432877, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190430675, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.198035464, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194181836, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192337983, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194594937, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194658255, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197515745, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197214444, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195798566, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190425265, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19098292, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196142559, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197999729, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197616035, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197215543, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192756397, - "uploadBytes": 1, - "downloadBytes": 1 - } - ], - "implementation": "go-libp2p", - "version": "v0.28", - "transportStack": "quic-v1" - }, - { - "result": [ - { - "type": "final", - "timeSeconds": 0.386765177, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.320330575, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.385305992, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.38024639, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.313244735, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.313621522, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384636661, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.379323186, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.391617289, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.324387233, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.375926101, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.382908596, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.380738834, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384314586, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.378544434, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.382352822, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.380490291, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.375841729, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.381868183, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.380211237, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.375604492, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383562006, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.32347195, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.390320575, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.37966069, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.379913103, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.380264144, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.389364058, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383615354, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.320034969, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384383792, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383779319, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383601098, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.319234923, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.322405462, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.380954408, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.381670782, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.318713063, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.385237874, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.388359185, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.388693582, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.320155878, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.38352134, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384178771, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.386685597, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.381280221, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.375107684, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.375676866, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.380145106, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384506594, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.380175347, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.38778356, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.312993909, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.318802317, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.378699838, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.388971114, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.374630421, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.322620768, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383586322, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384740983, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.381959818, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384192022, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.386908923, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.378920788, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.385537486, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.324643987, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383332667, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.378600589, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.388448288, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.376274118, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.389239172, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.387643797, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383373613, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.313542535, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.389367664, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.382784739, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383796797, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.379428835, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.378997507, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.385443984, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.321041186, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.386157728, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.381134113, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383316368, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.38012106, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.380290528, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384557446, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384645264, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.377481344, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.38622348, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384899743, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.382939455, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384218362, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.382867395, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.313457307, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383956043, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.38707263, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.379057857, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.374438275, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.375850106, - "uploadBytes": 1, - "downloadBytes": 1 - } - ], - "implementation": "go-libp2p", - "version": "v0.29", - "transportStack": "tcp" - }, - { - "result": [ - { - "type": "final", - "timeSeconds": 0.19893792, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19796773, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193967423, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197707709, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192602177, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193898987, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193602796, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19671957, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.199557359, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197565064, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196969348, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194451532, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195070172, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197009209, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192016454, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192509731, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.198762695, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19130411, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192052139, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197909169, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196498737, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196445902, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195190378, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19622301, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191970626, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192411416, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193688914, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19971456, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194741847, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193905538, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19402853, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196516389, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194773077, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191478552, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197807691, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194704646, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.199019432, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193096396, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196419166, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195971388, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197061652, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19540581, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19535498, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195851417, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19547293, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196979905, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197228247, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197612178, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197984364, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194493168, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191830187, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196632841, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193953883, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.190530558, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19584447, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196129616, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19917195, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196273419, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196998845, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192375528, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196513615, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.198362405, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197379338, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195307009, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.198181492, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191392662, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196242824, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196680925, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194262143, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196240651, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.1966799, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194520069, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191683409, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196010059, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.191684728, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.1964152, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196750522, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194482973, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.193981541, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196120209, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194058612, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194684275, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194736815, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194009624, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192193816, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194926655, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194527924, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.196267676, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197760833, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19810088, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194298394, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194202239, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195987403, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.198878052, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.197364782, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.194174755, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.192787283, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.198110285, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.19215692, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.195233251, - "uploadBytes": 1, - "downloadBytes": 1 - } - ], - "implementation": "go-libp2p", - "version": "v0.29", - "transportStack": "quic-v1" - }, - { - "result": [ - { - "type": "final", - "timeSeconds": 0.38073584, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.381552552, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.3757148, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.380460704, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.385276249, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.314744981, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.388844572, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.381288003, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.38186433, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.387325745, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.379499433, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.320010235, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384828339, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.383495572, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.387343196, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.323501065, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.381057193, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.321450281, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.375241864, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.318610613, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.379298824, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.385021542, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384239521, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.380953722, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.324876207, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.382706544, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.32521786, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.317873265, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.379288361, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.318859929, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.375503739, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.324546211, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384073416, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.385010594, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.385592734, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.389046898, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.317197386, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.378639487, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.389215648, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.313413903, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.391243367, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.375182312, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.319608945, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.316950265, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.382811771, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.3823172, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384124649, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.325330941, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.321577662, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.380191644, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.3831019, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.385960353, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.385147587, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.381033995, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.384709835, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.380504055, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.374766274, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.374473783, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.38202256, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.379460073, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.37510191, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.317955237, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.319410624, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.389706864, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.374925575, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.316700726, - "uploadBytes": 1, - "downloadBytes": 1 - }, - { - "type": "final", - "timeSeconds": 0.315515681, - "uploadBytes": 1, - "downloadBytes": 1 + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 261947392 }, { - "type": "final", - "timeSeconds": 0.379349574, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263323636 }, { - "type": "final", - "timeSeconds": 0.383316619, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263520268 }, { - "type": "final", - "timeSeconds": 0.318368946, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263454720 }, { - "type": "final", - "timeSeconds": 0.321941149, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262733824 }, { - "type": "final", - "timeSeconds": 0.378569855, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263782400 }, { - "type": "final", - "timeSeconds": 0.384752234, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263782400 }, { - "type": "final", - "timeSeconds": 0.312511653, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263061504 }, { - "type": "final", - "timeSeconds": 0.38028091, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 247595008 }, { - "type": "final", - "timeSeconds": 0.374845777, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263585792 }, { - "type": "final", - "timeSeconds": 0.322033448, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262471668 }, { - "type": "final", - "timeSeconds": 0.323412506, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262144012 }, { - "type": "final", - "timeSeconds": 0.320606393, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263454720 }, { - "type": "final", - "timeSeconds": 0.374505764, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 264175616 }, { - "type": "final", - "timeSeconds": 0.313469561, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 263979008 }, { - "type": "final", - "timeSeconds": 0.375255821, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262995968 }, { - "type": "final", - "timeSeconds": 0.38040784, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 60948480 }, { - "type": "final", - "timeSeconds": 0.380243702, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 168820736 }, { - "type": "final", - "timeSeconds": 0.385019528, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 191496192 }, { - "type": "final", - "timeSeconds": 0.379018235, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.002, + "uploadBytes": 0, + "downloadBytes": 212598784 }, { - "type": "final", - "timeSeconds": 0.324041313, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 237240320 }, { - "type": "final", - "timeSeconds": 0.375123457, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 247201792 }, { - "type": "final", - "timeSeconds": 0.381579315, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262602740 }, { - "type": "final", - "timeSeconds": 0.321706312, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 254345228 }, { - "type": "final", - "timeSeconds": 0.375606099, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 248905728 }, { - "type": "final", - "timeSeconds": 0.37568018, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 255328256 }, { - "type": "final", - "timeSeconds": 0.38077912, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 252051456 }, { - "type": "final", - "timeSeconds": 0.385033785, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 260046848 }, { - "type": "final", - "timeSeconds": 0.381666522, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 268173312 }, { - "type": "final", - "timeSeconds": 0.378076017, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 262733824 }, { - "type": "final", - "timeSeconds": 0.385991177, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 265945088 }, { - "type": "final", - "timeSeconds": 0.383056587, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 258801664 }, { - "type": "final", - "timeSeconds": 0.376539884, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 270925824 }, { - "type": "final", - "timeSeconds": 0.379463541, - "uploadBytes": 1, - "downloadBytes": 1 + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 269811712 + }, + { + "type": "intermediary", + "timeSeconds": 1.001, + "uploadBytes": 0, + "downloadBytes": 260243456 } ], - "implementation": "go-libp2p", - "version": "v0.31", + "implementation": "js-libp2p", + "version": "v1.0-noise-alloc-smart", "transportStack": "tcp" - }, + } + ], + "parameters": { + "uploadBytes": 0, + "downloadBytes": 9007199254740991 + } + }, + { + "name": "Connection establishment + 1 byte round trip latencies", + "unit": "s", + "results": [ { "result": [ { "type": "final", - "timeSeconds": 0.199955474, + "timeSeconds": 0.232, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.196274555, + "timeSeconds": 0.214, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.193752585, + "timeSeconds": 0.225, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.194808302, + "timeSeconds": 0.229, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.196478563, + "timeSeconds": 0.225, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.195481661, + "timeSeconds": 0.221, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.190790486, + "timeSeconds": 0.214, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.196874729, + "timeSeconds": 0.224, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.194124089, + "timeSeconds": 0.235, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.196060876, + "timeSeconds": 0.221, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.194923255, + "timeSeconds": 0.222, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.193738479, + "timeSeconds": 0.216, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.193948634, + "timeSeconds": 0.218, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.194456079, + "timeSeconds": 0.21, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.19442087, + "timeSeconds": 0.22, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.198982901, + "timeSeconds": 0.229, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.194010813, + "timeSeconds": 0.219, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.196703741, + "timeSeconds": 0.224, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.193004661, + "timeSeconds": 0.227, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.197500701, + "timeSeconds": 0.227, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.199129166, + "timeSeconds": 0.227, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.197284389, + "timeSeconds": 0.223, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.19555115, + "timeSeconds": 0.224, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.199703084, + "timeSeconds": 0.209, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.193976637, + "timeSeconds": 0.21, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.199232882, + "timeSeconds": 0.222, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.192593712, + "timeSeconds": 0.221, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.191234001, + "timeSeconds": 0.221, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.195463449, + "timeSeconds": 0.213, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.196113096, + "timeSeconds": 0.209, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.195463722, + "timeSeconds": 0.217, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.194381472, + "timeSeconds": 0.229, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.194262298, + "timeSeconds": 0.219, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.197857134, + "timeSeconds": 0.225, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.190148048, + "timeSeconds": 0.222, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.198972937, + "timeSeconds": 0.226, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.196344054, + "timeSeconds": 0.216, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.192026773, + "timeSeconds": 0.211, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.198737547, + "timeSeconds": 0.221, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.19783775, + "timeSeconds": 0.219, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.197155594, + "timeSeconds": 0.213, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.196735083, + "timeSeconds": 0.213, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.191648375, + "timeSeconds": 0.221, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.193038588, + "timeSeconds": 0.229, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.194926203, + "timeSeconds": 0.214, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.191734842, + "timeSeconds": 0.211, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.195950305, + "timeSeconds": 0.221, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.194837405, + "timeSeconds": 0.217, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.199666476, + "timeSeconds": 0.222, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.194246103, + "timeSeconds": 0.223, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.194548371, + "timeSeconds": 0.219, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.196157858, + "timeSeconds": 0.232, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.195718225, + "timeSeconds": 0.213, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.196514566, + "timeSeconds": 0.215, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.195837902, + "timeSeconds": 0.219, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.19211755, + "timeSeconds": 0.224, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.193934471, + "timeSeconds": 0.223, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.193101854, + "timeSeconds": 0.228, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.197623698, + "timeSeconds": 0.216, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.196251971, + "timeSeconds": 0.224, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.196335261, + "timeSeconds": 0.214, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.190524671, + "timeSeconds": 0.208, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.197146668, + "timeSeconds": 0.222, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.195341115, + "timeSeconds": 0.224, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.195138844, + "timeSeconds": 0.223, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.196077036, + "timeSeconds": 0.221, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.195068166, + "timeSeconds": 0.217, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.198731529, + "timeSeconds": 0.219, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.196683726, + "timeSeconds": 0.221, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.192128941, + "timeSeconds": 0.216, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.193651197, + "timeSeconds": 0.22, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.194279741, + "timeSeconds": 0.219, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.19576317, + "timeSeconds": 0.224, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.194720247, + "timeSeconds": 0.209, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.198654184, + "timeSeconds": 0.214, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.194757091, + "timeSeconds": 0.217, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.193242911, + "timeSeconds": 0.223, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.196364859, + "timeSeconds": 0.229, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.198118961, + "timeSeconds": 0.211, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.196460871, + "timeSeconds": 0.221, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.194461876, + "timeSeconds": 0.218, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.193588321, + "timeSeconds": 0.22, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.19216086, + "timeSeconds": 0.21, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.191492103, + "timeSeconds": 0.218, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.194171895, + "timeSeconds": 0.206, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.196707097, + "timeSeconds": 0.213, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.194721944, + "timeSeconds": 0.216, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.194937608, + "timeSeconds": 0.221, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.196097658, + "timeSeconds": 0.212, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.196565587, + "timeSeconds": 0.218, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.192549836, + "timeSeconds": 0.22, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.194950077, + "timeSeconds": 0.222, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.193180946, + "timeSeconds": 0.228, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.194402282, + "timeSeconds": 0.224, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.195139397, + "timeSeconds": 0.224, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.192958783, + "timeSeconds": 0.223, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.196851363, + "timeSeconds": 0.214, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.196165975, + "timeSeconds": 0.219, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.19414393, + "timeSeconds": 0.218, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.191291254, + "timeSeconds": 0.218, "uploadBytes": 1, "downloadBytes": 1 } ], - "implementation": "go-libp2p", - "version": "v0.31", - "transportStack": "quic-v1" + "implementation": "js-libp2p", + "version": "v1.0", + "transportStack": "tcp" }, { "result": [ { "type": "final", - "timeSeconds": 1.092, + "timeSeconds": 0.248, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.094, + "timeSeconds": 0.227, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.084, + "timeSeconds": 0.225, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.079, + "timeSeconds": 0.227, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.089, + "timeSeconds": 0.212, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.081, + "timeSeconds": 0.224, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.088, + "timeSeconds": 0.222, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.087, + "timeSeconds": 0.215, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.081, + "timeSeconds": 0.23, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.081, + "timeSeconds": 0.217, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.078, + "timeSeconds": 0.222, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.097, + "timeSeconds": 0.217, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.087, + "timeSeconds": 0.219, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.079, + "timeSeconds": 0.222, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.088, + "timeSeconds": 0.219, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.082, + "timeSeconds": 0.217, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.081, + "timeSeconds": 0.22, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.08, + "timeSeconds": 0.221, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.088, + "timeSeconds": 0.207, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.087, + "timeSeconds": 0.215, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.097, + "timeSeconds": 0.21, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.077, + "timeSeconds": 0.212, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.098, + "timeSeconds": 0.224, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.092, + "timeSeconds": 0.229, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.093, + "timeSeconds": 0.226, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.089, + "timeSeconds": 0.226, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.094, + "timeSeconds": 0.215, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.095, + "timeSeconds": 0.212, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.094, + "timeSeconds": 0.228, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.087, + "timeSeconds": 0.219, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.087, + "timeSeconds": 0.216, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.083, + "timeSeconds": 0.209, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.08, + "timeSeconds": 0.213, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.106, + "timeSeconds": 0.221, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.088, + "timeSeconds": 0.217, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.09, + "timeSeconds": 0.216, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.086, + "timeSeconds": 0.219, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.094, + "timeSeconds": 0.216, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.087, + "timeSeconds": 0.214, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.084, + "timeSeconds": 0.221, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.087, + "timeSeconds": 0.227, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.078, + "timeSeconds": 0.227, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.096, + "timeSeconds": 0.204, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.087, + "timeSeconds": 0.218, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.094, + "timeSeconds": 0.222, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.093, + "timeSeconds": 0.213, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.096, + "timeSeconds": 0.223, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.089, + "timeSeconds": 0.221, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.098, + "timeSeconds": 0.215, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.089, + "timeSeconds": 0.222, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.079, + "timeSeconds": 0.215, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.083, + "timeSeconds": 0.231, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.095, + "timeSeconds": 0.219, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.087, + "timeSeconds": 0.222, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.084, + "timeSeconds": 0.229, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.087, + "timeSeconds": 0.227, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.081, + "timeSeconds": 0.222, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.092, + "timeSeconds": 0.214, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.085, + "timeSeconds": 0.215, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.078, + "timeSeconds": 0.224, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.083, + "timeSeconds": 0.223, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.092, + "timeSeconds": 0.228, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.083, + "timeSeconds": 0.229, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.09, + "timeSeconds": 0.223, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.077, + "timeSeconds": 0.219, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.092, + "timeSeconds": 0.223, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.081, + "timeSeconds": 0.208, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.081, + "timeSeconds": 0.225, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.084, + "timeSeconds": 0.228, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.088, + "timeSeconds": 0.226, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.079, + "timeSeconds": 0.217, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.082, + "timeSeconds": 0.206, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.087, + "timeSeconds": 0.215, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.093, + "timeSeconds": 0.214, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.082, + "timeSeconds": 0.225, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.085, + "timeSeconds": 0.227, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.096, + "timeSeconds": 0.226, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.09, + "timeSeconds": 0.228, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.092, + "timeSeconds": 0.219, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.087, + "timeSeconds": 0.226, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.087, + "timeSeconds": 0.217, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.084, + "timeSeconds": 0.221, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.09, + "timeSeconds": 0.216, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.093, + "timeSeconds": 0.208, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.093, + "timeSeconds": 0.223, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.088, + "timeSeconds": 0.224, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.089, + "timeSeconds": 0.219, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.096, + "timeSeconds": 0.225, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.09, + "timeSeconds": 0.21, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.091, + "timeSeconds": 0.218, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.097, + "timeSeconds": 0.222, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.083, + "timeSeconds": 0.222, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.09, + "timeSeconds": 0.226, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.083, + "timeSeconds": 0.226, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.084, + "timeSeconds": 0.228, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.092, + "timeSeconds": 0.211, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.089, + "timeSeconds": 0.227, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.091, + "timeSeconds": 0.213, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.081, + "timeSeconds": 0.218, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 1.097, + "timeSeconds": 0.229, "uploadBytes": 1, "downloadBytes": 1 } ], "implementation": "js-libp2p", - "version": "v0.46", + "version": "v1.0-noise-alloc", "transportStack": "tcp" }, { "result": [ { "type": "final", - "timeSeconds": 0.447, + "timeSeconds": 0.233, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.438, + "timeSeconds": 0.215, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.428, + "timeSeconds": 0.214, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.433, + "timeSeconds": 0.228, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.431, + "timeSeconds": 0.216, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.43, + "timeSeconds": 0.226, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.431, + "timeSeconds": 0.226, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.437, + "timeSeconds": 0.215, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.441, + "timeSeconds": 0.219, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.433, + "timeSeconds": 0.214, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.433, + "timeSeconds": 0.216, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.428, + "timeSeconds": 0.23, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.434, + "timeSeconds": 0.22, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.425, + "timeSeconds": 0.218, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.432, + "timeSeconds": 0.227, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.434, + "timeSeconds": 0.214, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.432, + "timeSeconds": 0.221, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.438, + "timeSeconds": 0.219, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.43, + "timeSeconds": 0.221, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.428, + "timeSeconds": 0.231, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.431, + "timeSeconds": 0.224, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.437, + "timeSeconds": 0.228, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.433, + "timeSeconds": 0.205, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.43, + "timeSeconds": 0.208, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.429, + "timeSeconds": 0.221, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.43, + "timeSeconds": 0.216, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.442, + "timeSeconds": 0.229, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.436, + "timeSeconds": 0.222, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.426, + "timeSeconds": 0.232, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.425, + "timeSeconds": 0.226, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.437, + "timeSeconds": 0.227, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.436, + "timeSeconds": 0.209, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.432, + "timeSeconds": 0.225, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.429, + "timeSeconds": 0.222, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.438, + "timeSeconds": 0.228, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.431, + "timeSeconds": 0.215, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.432, + "timeSeconds": 0.219, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.429, + "timeSeconds": 0.218, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.435, + "timeSeconds": 0.22, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.43, + "timeSeconds": 0.214, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.438, + "timeSeconds": 0.224, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.425, + "timeSeconds": 0.226, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.426, + "timeSeconds": 0.218, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.427, + "timeSeconds": 0.224, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.437, + "timeSeconds": 0.217, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.432, + "timeSeconds": 0.209, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.435, + "timeSeconds": 0.229, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.438, + "timeSeconds": 0.223, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.428, + "timeSeconds": 0.213, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.423, + "timeSeconds": 0.228, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.431, + "timeSeconds": 0.218, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.433, + "timeSeconds": 0.22, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.431, + "timeSeconds": 0.216, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.43, + "timeSeconds": 0.221, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.431, + "timeSeconds": 0.224, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.433, + "timeSeconds": 0.22, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.431, + "timeSeconds": 0.226, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.43, + "timeSeconds": 0.217, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.432, + "timeSeconds": 0.224, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.428, + "timeSeconds": 0.227, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.429, + "timeSeconds": 0.217, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.431, + "timeSeconds": 0.209, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.432, + "timeSeconds": 0.218, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.432, + "timeSeconds": 0.213, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.433, + "timeSeconds": 0.224, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.433, + "timeSeconds": 0.221, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.421, + "timeSeconds": 0.223, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.436, + "timeSeconds": 0.229, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.433, + "timeSeconds": 0.225, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.433, + "timeSeconds": 0.228, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.433, + "timeSeconds": 0.217, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.429, + "timeSeconds": 0.224, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.426, + "timeSeconds": 0.22, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.432, + "timeSeconds": 0.208, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.43, + "timeSeconds": 0.221, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.436, + "timeSeconds": 0.214, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.429, + "timeSeconds": 0.228, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.429, + "timeSeconds": 0.218, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.438, + "timeSeconds": 0.222, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.425, + "timeSeconds": 0.216, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.424, + "timeSeconds": 0.217, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.427, + "timeSeconds": 0.22, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.427, + "timeSeconds": 0.213, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.434, + "timeSeconds": 0.224, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.428, + "timeSeconds": 0.228, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.424, + "timeSeconds": 0.223, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.428, + "timeSeconds": 0.226, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.437, + "timeSeconds": 0.225, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.424, + "timeSeconds": 0.231, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.432, + "timeSeconds": 0.215, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.428, + "timeSeconds": 0.216, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.432, + "timeSeconds": 0.222, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.432, + "timeSeconds": 0.224, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.426, + "timeSeconds": 0.217, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.429, + "timeSeconds": 0.208, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.434, + "timeSeconds": 0.208, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.425, + "timeSeconds": 0.223, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.435, + "timeSeconds": 0.225, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.426, + "timeSeconds": 0.217, "uploadBytes": 1, "downloadBytes": 1 }, { "type": "final", - "timeSeconds": 0.429, + "timeSeconds": 0.226, "uploadBytes": 1, "downloadBytes": 1 } ], "implementation": "js-libp2p", - "version": "v1.0", + "version": "v1.0-noise-alloc-smart", "transportStack": "tcp" } ], @@ -40462,173 +8737,173 @@ "pings": { "unit": "s", "results": [ - 0.0627, - 0.0627, - 0.0626, - 0.0626, - 0.0678, - 0.0678, - 0.0678, - 0.0678, - 0.0678, - 0.0679, - 0.0678, - 0.0678, - 0.179, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0634, - 0.0626, - 0.0626, - 0.0626, - 0.0627, - 0.0626, - 0.063, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.063, - 0.0626, - 0.0631, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626, - 0.0626 + 0.060899999999999996, + 0.0613, + 0.060899999999999996, + 0.0611, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.061200000000000004, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.061200000000000004, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.061200000000000004, + 0.060899999999999996, + 0.061399999999999996, + 0.060899999999999996, + 0.061200000000000004, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996, + 0.060899999999999996 ] }, "iperf": { "unit": "bit/s", "results": [ - 1880000000, - 4790000000, - 4780000000, - 4790000000, - 4780000000, - 4790000000, - 4780000000, - 4790000000, - 4780000000, - 4780000000, - 4790000000, - 4780000000, - 4790000000, - 4780000000, - 4680000000, - 4650000000, - 4780000000, - 4790000000, - 4780000000, - 4790000000, - 4780000000, - 4790000000, - 4780000000, - 4780000000, - 4790000000, - 4780000000, - 4790000000, - 4780000000, - 4790000000, - 4780000000, - 4790000000, - 4780000000, - 4790000000, - 4780000000, - 4790000000, - 4780000000, - 4790000000, - 4780000000, - 4790000000, - 4780000000, - 4790000000, - 4780000000, - 4780000000, - 4790000000, - 4780000000, - 4790000000, - 4780000000, - 4790000000, - 4780000000, - 4790000000, - 4780000000, - 4790000000, - 4780000000, - 4790000000, - 4780000000, - 4790000000, - 4780000000, - 4780000000, - 4790000000, + 2049999999.9999998, + 4700000000, 4780000000, - 4730000000, - 4720000000 + 4110000000.0000005, + 3570000000, + 3680000000, + 3740000000, + 2850000000, + 2760000000, + 2160000000, + 2060000000, + 2109999999.9999998, + 2170000000, + 2200000000, + 2250000000, + 2280000000, + 2310000000, + 2330000000, + 2350000000, + 2370000000, + 2360000000, + 2390000000, + 2380000000, + 2390000000, + 2400000000, + 2390000000, + 2390000000, + 2400000000, + 2390000000, + 2390000000, + 2400000000, + 2400000000, + 2390000000, + 2420000000, + 2420000000, + 2440000000, + 2460000000, + 2470000000, + 2510000000, + 2550000000, + 2580000000, + 2620000000, + 2680000000, + 2750000000, + 2790000000, + 2880000000, + 2970000000, + 3040000000, + 3160000000, + 3270000000, + 3030000000, + 2470000000, + 2600000000, + 2690000000, + 2790000000, + 2880000000, + 2960000000, + 3030000000, + 3080000000, + 3160000000, + 2710000000, + 2700000000 ] } } \ No newline at end of file