From 8741423ea1d5bd9080583783342d15ccde688ea9 Mon Sep 17 00:00:00 2001 From: Sebastian Stammler Date: Tue, 6 Aug 2024 23:36:22 +0200 Subject: [PATCH 01/29] op-e2e: Fix GraniteSystemConfig (#11361) --- op-e2e/setup.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op-e2e/setup.go b/op-e2e/setup.go index cac85da91e..b7c97c435e 100644 --- a/op-e2e/setup.go +++ b/op-e2e/setup.go @@ -216,7 +216,7 @@ func FjordSystemConfig(t *testing.T, fjordTimeOffset *hexutil.Uint64) SystemConf } func GraniteSystemConfig(t *testing.T, graniteTimeOffset *hexutil.Uint64) SystemConfig { - cfg := EcotoneSystemConfig(t, &genesisTime) + cfg := FjordSystemConfig(t, &genesisTime) cfg.DeployConfig.L2GenesisGraniteTimeOffset = graniteTimeOffset return cfg } From e6dd1ee95cb499dc3120103e407ae40be19586d1 Mon Sep 17 00:00:00 2001 From: Inphi Date: Tue, 6 Aug 2024 15:30:05 -0700 Subject: [PATCH 02/29] update sepolia-devnet-0 deploy-config (#11371) --- packages/contracts-bedrock/deploy-config/sepolia-devnet-0.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/contracts-bedrock/deploy-config/sepolia-devnet-0.json b/packages/contracts-bedrock/deploy-config/sepolia-devnet-0.json index afb31e6b86..7dd5df431c 100644 --- a/packages/contracts-bedrock/deploy-config/sepolia-devnet-0.json +++ b/packages/contracts-bedrock/deploy-config/sepolia-devnet-0.json @@ -66,7 +66,7 @@ "eip1559Denominator": 250, "eip1559DenominatorCanyon": 250, "systemConfigStartBlock": 4071248, - "faultGameAbsolutePrestate": "0x03e69d3de5155f4a80da99dd534561cbddd4f9dd56c9ecc704d6886625711d2b", + "faultGameAbsolutePrestate": "0x0385c3f8ee78491001d92b90b07d0cf387b7b52ab9b83b4d87c994e92cf823ba", "faultGameMaxDepth": 73, "faultGameClockExtension": 3600, "faultGameMaxClockDuration": 14400, From 79c8fe8327d6cd32b2d40a45eca8207206de6c6f Mon Sep 17 00:00:00 2001 From: protolambda Date: Tue, 6 Aug 2024 18:23:19 -0600 Subject: [PATCH 03/29] cannon: move example test programs into testdata directory to prevent Go tool noise (#11379) --- .circleci/config.yml | 2 +- cannon/.gitignore | 2 +- cannon/Makefile | 2 +- cannon/README.md | 2 +- cannon/mipsevm/multithreaded/instrumented_test.go | 4 ++-- cannon/mipsevm/multithreaded/state_test.go | 2 +- cannon/mipsevm/singlethreaded/state_test.go | 2 +- cannon/mipsevm/tests/evm_test.go | 4 ++-- cannon/mipsevm/testutil/vmtests.go | 4 ++-- cannon/testdata/README.md | 11 +++++++++++ cannon/{ => testdata}/example/Makefile | 0 cannon/{ => testdata}/example/alloc/go.mod | 2 +- cannon/{ => testdata}/example/alloc/go.sum | 0 cannon/{ => testdata}/example/alloc/main.go | 0 cannon/{ => testdata}/example/claim/go.mod | 2 +- cannon/{ => testdata}/example/claim/go.sum | 0 cannon/{ => testdata}/example/claim/main.go | 0 cannon/{ => testdata}/example/hello/go.mod | 0 cannon/{ => testdata}/example/hello/main.go | 0 cannon/{ => testdata}/example/multithreaded/go.mod | 0 cannon/{ => testdata}/example/multithreaded/main.go | 0 21 files changed, 25 insertions(+), 14 deletions(-) create mode 100644 cannon/testdata/README.md rename cannon/{ => testdata}/example/Makefile (100%) rename cannon/{ => testdata}/example/alloc/go.mod (98%) rename cannon/{ => testdata}/example/alloc/go.sum (100%) rename cannon/{ => testdata}/example/alloc/main.go (100%) rename cannon/{ => testdata}/example/claim/go.mod (98%) rename cannon/{ => testdata}/example/claim/go.sum (100%) rename cannon/{ => testdata}/example/claim/main.go (100%) rename cannon/{ => testdata}/example/hello/go.mod (100%) rename cannon/{ => testdata}/example/hello/main.go (100%) rename cannon/{ => testdata}/example/multithreaded/go.mod (100%) rename cannon/{ => testdata}/example/multithreaded/main.go (100%) diff --git a/.circleci/config.yml b/.circleci/config.yml index 6931718f48..81de1bab20 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -137,7 +137,7 @@ jobs: - run: name: build Cannon example binaries command: make elf # only compile ELF binaries with Go, we do not have MIPS GCC for creating the debug-dumps. - working_directory: cannon/example + working_directory: cannon/testdata/example - run: name: Cannon Go lint command: | diff --git a/cannon/.gitignore b/cannon/.gitignore index fc1a1f3b99..c3e45199f0 100644 --- a/cannon/.gitignore +++ b/cannon/.gitignore @@ -5,7 +5,7 @@ cache venv .idea *.log -example/bin +testdata/example/bin contracts/out state.json *.json diff --git a/cannon/Makefile b/cannon/Makefile index f815b9f374..0240b7df09 100644 --- a/cannon/Makefile +++ b/cannon/Makefile @@ -20,7 +20,7 @@ clean: rm -rf bin elf: - make -C ./example elf + make -C ./testdata/example elf contract: cd ../packages/contracts-bedrock && forge build diff --git a/cannon/README.md b/cannon/README.md index 5ff497162f..e9e751ce2f 100644 --- a/cannon/README.md +++ b/cannon/README.md @@ -83,7 +83,7 @@ The smart-contracts are integrated into the Optimism monorepo contracts: Example programs that can be run and proven with Cannon. Optional dependency, but required for `mipsevm` Go tests. -See [`example/Makefile`](./example/Makefile) for building the example MIPS binaries. +See [`testdata/example/Makefile`](./testdata/example/Makefile) for building the example MIPS binaries. ## License diff --git a/cannon/mipsevm/multithreaded/instrumented_test.go b/cannon/mipsevm/multithreaded/instrumented_test.go index 50382ae185..c20126d3ca 100644 --- a/cannon/mipsevm/multithreaded/instrumented_test.go +++ b/cannon/mipsevm/multithreaded/instrumented_test.go @@ -32,7 +32,7 @@ func TestInstrumentedState_Claim(t *testing.T) { } func TestInstrumentedState_MultithreadedProgram(t *testing.T) { - state := testutil.LoadELFProgram(t, "../../example/bin/multithreaded.elf", CreateInitialState, false) + state := testutil.LoadELFProgram(t, "../../testdata/example/bin/multithreaded.elf", CreateInitialState, false) oracle := testutil.StaticOracle(t, []byte{}) var stdOutBuf, stdErrBuf bytes.Buffer @@ -56,7 +56,7 @@ func TestInstrumentedState_MultithreadedProgram(t *testing.T) { func TestInstrumentedState_Alloc(t *testing.T) { t.Skip("TODO(client-pod#906): Currently failing - need to debug.") - state := testutil.LoadELFProgram(t, "../../example/bin/alloc.elf", CreateInitialState, false) + state := testutil.LoadELFProgram(t, "../../testdata/example/bin/alloc.elf", CreateInitialState, false) const numAllocs = 100 // where each alloc is a 32 MiB chunk oracle := testutil.AllocOracle(t, numAllocs) diff --git a/cannon/mipsevm/multithreaded/state_test.go b/cannon/mipsevm/multithreaded/state_test.go index e6805423b1..e9dbef2db3 100644 --- a/cannon/mipsevm/multithreaded/state_test.go +++ b/cannon/mipsevm/multithreaded/state_test.go @@ -86,7 +86,7 @@ func TestState_EncodeWitness(t *testing.T) { } func TestState_JSONCodec(t *testing.T) { - elfProgram, err := elf.Open("../../example/bin/hello.elf") + elfProgram, err := elf.Open("../../testdata/example/bin/hello.elf") require.NoError(t, err, "open ELF file") state, err := program.LoadELF(elfProgram, CreateInitialState) require.NoError(t, err, "load ELF into state") diff --git a/cannon/mipsevm/singlethreaded/state_test.go b/cannon/mipsevm/singlethreaded/state_test.go index 2ab4a5009b..27588f8b67 100644 --- a/cannon/mipsevm/singlethreaded/state_test.go +++ b/cannon/mipsevm/singlethreaded/state_test.go @@ -58,7 +58,7 @@ func TestStateHash(t *testing.T) { } func TestStateJSONCodec(t *testing.T) { - elfProgram, err := elf.Open("../../example/bin/hello.elf") + elfProgram, err := elf.Open("../../testdata/example/bin/hello.elf") require.NoError(t, err, "open ELF file") state, err := program.LoadELF(elfProgram, CreateInitialState) require.NoError(t, err, "load ELF into state") diff --git a/cannon/mipsevm/tests/evm_test.go b/cannon/mipsevm/tests/evm_test.go index 361a924eb3..f7ca26589c 100644 --- a/cannon/mipsevm/tests/evm_test.go +++ b/cannon/mipsevm/tests/evm_test.go @@ -427,7 +427,7 @@ func TestHelloEVM(t *testing.T) { evm.SetTracer(tracer) testutil.LogStepFailureAtCleanup(t, evm) - state := testutil.LoadELFProgram(t, "../../example/bin/hello.elf", singlethreaded.CreateInitialState, true) + state := testutil.LoadELFProgram(t, "../../testdata/example/bin/hello.elf", singlethreaded.CreateInitialState, true) var stdOutBuf, stdErrBuf bytes.Buffer goState := singlethreaded.NewInstrumentedState(state, nil, io.MultiWriter(&stdOutBuf, os.Stdout), io.MultiWriter(&stdErrBuf, os.Stderr), nil) @@ -469,7 +469,7 @@ func TestClaimEVM(t *testing.T) { evm.SetTracer(tracer) testutil.LogStepFailureAtCleanup(t, evm) - state := testutil.LoadELFProgram(t, "../../example/bin/claim.elf", singlethreaded.CreateInitialState, true) + state := testutil.LoadELFProgram(t, "../../testdata/example/bin/claim.elf", singlethreaded.CreateInitialState, true) oracle, expectedStdOut, expectedStdErr := testutil.ClaimTestOracle(t) var stdOutBuf, stdErrBuf bytes.Buffer diff --git a/cannon/mipsevm/testutil/vmtests.go b/cannon/mipsevm/testutil/vmtests.go index 71bb9937f2..c016b91e07 100644 --- a/cannon/mipsevm/testutil/vmtests.go +++ b/cannon/mipsevm/testutil/vmtests.go @@ -78,7 +78,7 @@ func RunVMTests_OpenMips[T mipsevm.FPVMState](t *testing.T, stateFactory StateFa } func RunVMTest_Hello[T mipsevm.FPVMState](t *testing.T, initState program.CreateInitialFPVMState[T], vmFactory VMFactory[T], doPatchGo bool) { - state := LoadELFProgram(t, "../../example/bin/hello.elf", initState, doPatchGo) + state := LoadELFProgram(t, "../../testdata/example/bin/hello.elf", initState, doPatchGo) var stdOutBuf, stdErrBuf bytes.Buffer us := vmFactory(state, nil, io.MultiWriter(&stdOutBuf, os.Stdout), io.MultiWriter(&stdErrBuf, os.Stderr), CreateLogger()) @@ -99,7 +99,7 @@ func RunVMTest_Hello[T mipsevm.FPVMState](t *testing.T, initState program.Create } func RunVMTest_Claim[T mipsevm.FPVMState](t *testing.T, initState program.CreateInitialFPVMState[T], vmFactory VMFactory[T], doPatchGo bool) { - state := LoadELFProgram(t, "../../example/bin/claim.elf", initState, doPatchGo) + state := LoadELFProgram(t, "../../testdata/example/bin/claim.elf", initState, doPatchGo) oracle, expectedStdOut, expectedStdErr := ClaimTestOracle(t) diff --git a/cannon/testdata/README.md b/cannon/testdata/README.md new file mode 100644 index 0000000000..4730cac00b --- /dev/null +++ b/cannon/testdata/README.md @@ -0,0 +1,11 @@ +# Cannon testdata + +These example Go programs are used in tests, +and encapsulated as their own Go modules. + +## Testdata + +The `testdata` directory name (special Go exception) prevents tools like `go mod tidy` +that run from the monorepo root from picking up on the test data, +preventing noisy dependabot PRs. + diff --git a/cannon/example/Makefile b/cannon/testdata/example/Makefile similarity index 100% rename from cannon/example/Makefile rename to cannon/testdata/example/Makefile diff --git a/cannon/example/alloc/go.mod b/cannon/testdata/example/alloc/go.mod similarity index 98% rename from cannon/example/alloc/go.mod rename to cannon/testdata/example/alloc/go.mod index d2e4bd2239..5ead2ebe8a 100644 --- a/cannon/example/alloc/go.mod +++ b/cannon/testdata/example/alloc/go.mod @@ -11,4 +11,4 @@ require ( golang.org/x/sys v0.22.0 // indirect ) -replace github.com/ethereum-optimism/optimism v0.0.0 => ../../.. +replace github.com/ethereum-optimism/optimism v0.0.0 => ../../../.. diff --git a/cannon/example/alloc/go.sum b/cannon/testdata/example/alloc/go.sum similarity index 100% rename from cannon/example/alloc/go.sum rename to cannon/testdata/example/alloc/go.sum diff --git a/cannon/example/alloc/main.go b/cannon/testdata/example/alloc/main.go similarity index 100% rename from cannon/example/alloc/main.go rename to cannon/testdata/example/alloc/main.go diff --git a/cannon/example/claim/go.mod b/cannon/testdata/example/claim/go.mod similarity index 98% rename from cannon/example/claim/go.mod rename to cannon/testdata/example/claim/go.mod index b7417d1531..dfbd45f6f5 100644 --- a/cannon/example/claim/go.mod +++ b/cannon/testdata/example/claim/go.mod @@ -11,4 +11,4 @@ require ( golang.org/x/sys v0.22.0 // indirect ) -replace github.com/ethereum-optimism/optimism v0.0.0 => ../../.. +replace github.com/ethereum-optimism/optimism v0.0.0 => ../../../.. diff --git a/cannon/example/claim/go.sum b/cannon/testdata/example/claim/go.sum similarity index 100% rename from cannon/example/claim/go.sum rename to cannon/testdata/example/claim/go.sum diff --git a/cannon/example/claim/main.go b/cannon/testdata/example/claim/main.go similarity index 100% rename from cannon/example/claim/main.go rename to cannon/testdata/example/claim/main.go diff --git a/cannon/example/hello/go.mod b/cannon/testdata/example/hello/go.mod similarity index 100% rename from cannon/example/hello/go.mod rename to cannon/testdata/example/hello/go.mod diff --git a/cannon/example/hello/main.go b/cannon/testdata/example/hello/main.go similarity index 100% rename from cannon/example/hello/main.go rename to cannon/testdata/example/hello/main.go diff --git a/cannon/example/multithreaded/go.mod b/cannon/testdata/example/multithreaded/go.mod similarity index 100% rename from cannon/example/multithreaded/go.mod rename to cannon/testdata/example/multithreaded/go.mod diff --git a/cannon/example/multithreaded/main.go b/cannon/testdata/example/multithreaded/main.go similarity index 100% rename from cannon/example/multithreaded/main.go rename to cannon/testdata/example/multithreaded/main.go From ec45f6634ab2855a4ae5d30c4e240d79f081d689 Mon Sep 17 00:00:00 2001 From: protolambda Date: Wed, 7 Aug 2024 03:40:40 -0600 Subject: [PATCH 04/29] op-node: abort block publishing if conductor commit fails (#11380) --- op-node/rollup/sequencing/sequencer.go | 1 + 1 file changed, 1 insertion(+) diff --git a/op-node/rollup/sequencing/sequencer.go b/op-node/rollup/sequencing/sequencer.go index 0a02bcaf40..118cdf4be3 100644 --- a/op-node/rollup/sequencing/sequencer.go +++ b/op-node/rollup/sequencing/sequencer.go @@ -268,6 +268,7 @@ func (d *Sequencer) onBuildSealed(x engine.BuildSealedEvent) { if err := d.conductor.CommitUnsafePayload(ctx, x.Envelope); err != nil { d.emitter.Emit(rollup.EngineTemporaryErrorEvent{ Err: fmt.Errorf("failed to commit unsafe payload to conductor: %w", err)}) + return } // begin gossiping as soon as possible From 2491a3732fe97c9eec9baf615a010e8f7a42f738 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Thu, 8 Aug 2024 00:38:07 +1000 Subject: [PATCH 05/29] Fix devnet-up when op-program/bin is missing prestate-proof.json (#11383) --- Makefile | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 51d0d1397b..2f9620ee92 100644 --- a/Makefile +++ b/Makefile @@ -137,11 +137,18 @@ reproducible-prestate: ## Builds reproducible-prestate binary make -C ./op-program reproducible-prestate .PHONY: reproducible-prestate -cannon-prestate: op-program cannon ## Generates prestate using cannon and op-program +# Checks if prestate outputs are missing +cannon-prestate: op-program/bin/prestate-proof.json +.PHONY: cannon-prestate + +op-program/bin/prestate-proof.json: + make generate-cannon-prestates + +generate-cannon-prestates: op-program cannon ## Generates prestate using cannon and op-program ./cannon/bin/cannon load-elf --path op-program/bin/op-program-client.elf --out op-program/bin/prestate.json --meta op-program/bin/meta.json ./cannon/bin/cannon run --proof-at '=0' --stop-at '=1' --input op-program/bin/prestate.json --meta op-program/bin/meta.json --proof-fmt 'op-program/bin/%d.json' --output "" mv op-program/bin/0.json op-program/bin/prestate-proof.json -.PHONY: cannon-prestate +.PHONY: generate-cannon-prestates mod-tidy: ## Cleans up unused dependencies in Go modules # Below GOPRIVATE line allows mod-tidy to be run immediately after @@ -160,16 +167,14 @@ nuke: clean devnet-clean ## Completely clean the project directory git clean -Xdf .PHONY: nuke -pre-devnet: submodules ## Prepares for running a local devnet +## Prepares for running a local devnet +pre-devnet: submodules cannon-prestate @if ! [ -x "$(command -v geth)" ]; then \ make install-geth; \ fi @if ! [ -x "$(command -v eth2-testnet-genesis)" ]; then \ make install-eth2-testnet-genesis; \ fi - @if [ ! -e op-program/bin ]; then \ - make cannon-prestate; \ - fi .PHONY: pre-devnet devnet-up: pre-devnet ## Starts the local devnet From 96b9e70118a200fe43762fb96c34698753acf150 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Wed, 7 Aug 2024 23:00:58 +0300 Subject: [PATCH 06/29] contracts-bedrock: migrate to just (#11276) * contracts-bedrock: migrate to just Move away from `pnpm` for contracts scripts and towards `just`. `just` was made for this, since we are moving away from JS it makes no sense to keep `pnpm` around which is native to the JS ecosystem. * ci: install just * ops: cleanup, docs * ci: install just * justfile: update * ci: fix install * snapshots: update * contracts-bedrock: remove pnpm/node, cleanup dockerfile * slither ci: no longer need for workaround (TM) * ts-linting: remove * kontrol: regenerate snapshots * safecall: update test * test: update Co-authored-by: Matt Solomon * docs: update Co-authored-by: Matt Solomon * readme: update Co-authored-by: Matt Solomon * docs: update Co-authored-by: Matt Solomon * docs: update Co-authored-by: Matt Solomon * docs: update Co-authored-by: Maurelian * versions: use latest * ci: fix * CONTRIBUTING: update * ci: fix * lint: fix --------- Co-authored-by: protolambda Co-authored-by: Matt Solomon Co-authored-by: Maurelian --- .circleci/config.yml | 25 +- .github/workflows/slither.yml | 7 - ops/docker/Dockerfile.packages | 74 +- package.json | 4 +- packages/contracts-bedrock/.eslintignore | 9 - packages/contracts-bedrock/.eslintrc.js | 185 - packages/contracts-bedrock/.prettierrc.js | 10 - packages/contracts-bedrock/CONTRIBUTING.md | 37 +- packages/contracts-bedrock/README.md | 2 +- packages/contracts-bedrock/justfile | 91 + packages/contracts-bedrock/package.json | 68 - packages/contracts-bedrock/pnpm-lock.yaml | 3483 ----------------- .../scripts/checks/check-snapshots.sh | 2 +- .../scripts/getting-started/versions.sh | 2 + .../test/libraries/SafeCall.t.sol | 2 + packages/contracts-bedrock/tsconfig.json | 30 - versions.json | 3 +- 17 files changed, 152 insertions(+), 3882 deletions(-) delete mode 100644 packages/contracts-bedrock/.eslintignore delete mode 100644 packages/contracts-bedrock/.eslintrc.js delete mode 100644 packages/contracts-bedrock/.prettierrc.js create mode 100644 packages/contracts-bedrock/justfile delete mode 100644 packages/contracts-bedrock/package.json delete mode 100644 packages/contracts-bedrock/pnpm-lock.yaml delete mode 100644 packages/contracts-bedrock/tsconfig.json diff --git a/.circleci/config.yml b/.circleci/config.yml index 81de1bab20..d171341ca1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -528,7 +528,7 @@ jobs: # We do not use the pre-built contracts becuase forge coverage uses different optimizer settings - run: name: test and generate coverage - command: pnpm coverage:lcov + command: just coverage-lcov no_output_timeout: 18m environment: FOUNDRY_PROFILE: ci @@ -556,7 +556,7 @@ jobs: working_directory: packages/contracts-bedrock - run: name: run tests - command: pnpm test + command: just test environment: FOUNDRY_PROFILE: ci working_directory: packages/contracts-bedrock @@ -602,22 +602,22 @@ jobs: # Semver lock must come second because one of the later steps may modify the cache & force a contracts rebuild. name: semver lock command: | - pnpm semver-lock + just semver-lock git diff --exit-code semver-lock.json || echo "export SEMVER_LOCK_STATUS=1" >> "$BASH_ENV" working_directory: packages/contracts-bedrock - run: name: check deploy configs - command: pnpm validate-deploy-configs || echo "export DEPLOY_CONFIGS_STATUS=1" >> "$BASH_ENV" + command: just validate-deploy-configs || echo "export DEPLOY_CONFIGS_STATUS=1" >> "$BASH_ENV" working_directory: packages/contracts-bedrock - run: name: lint command: | - pnpm lint:check || echo "export LINT_STATUS=1" >> "$BASH_ENV" + just lint-check || echo "export LINT_STATUS=1" >> "$BASH_ENV" working_directory: packages/contracts-bedrock - run: name: gas snapshot command: | - pnpm gas-snapshot --check || echo "export GAS_SNAPSHOT_STATUS=1" >> "$BASH_ENV" + just gas-snapshot-check || echo "export GAS_SNAPSHOT_STATUS=1" >> "$BASH_ENV" environment: FOUNDRY_PROFILE: ci working_directory: packages/contracts-bedrock @@ -625,13 +625,13 @@ jobs: - run: name: invariant docs command: | - pnpm autogen:invariant-docs + just autogen-invariant-docs git diff --exit-code ./invariant-docs/*.md || echo "export INVARIANT_DOCS_STATUS=1" >> "$BASH_ENV" working_directory: packages/contracts-bedrock - run: name: snapshots command: | - pnpm snapshots:check || echo "export SNAPSHOTS_STATUS=1" >> "$BASH_ENV" + just snapshots-check || echo "export SNAPSHOTS_STATUS=1" >> "$BASH_ENV" working_directory: packages/contracts-bedrock - run: name: size check @@ -697,7 +697,7 @@ jobs: patterns: contracts-bedrock - run: name: validate spacers - command: pnpm validate-spacers + command: just validate-spacers working_directory: packages/contracts-bedrock todo-issues: @@ -1162,6 +1162,11 @@ jobs: command: | nvm install nvm use && node --version && npm --version + - run: + name: Install Just + command: | + curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to $HOME/bin + echo 'export PATH="${PATH}:$HOME/bin"' >> $BASH_ENV - run: name: Install pnpm command: | @@ -1491,7 +1496,7 @@ jobs: docker_layer_caching: true - run: name: Run Kontrol Tests - command: pnpm test:kontrol + command: just test-kontrol working_directory: ./packages/contracts-bedrock - store_artifacts: path: ./packages/contracts-bedrock/test/kontrol/logs/kontrol-results_latest.tar.gz diff --git a/.github/workflows/slither.yml b/.github/workflows/slither.yml index f863b8de60..069c6eb2f0 100644 --- a/.github/workflows/slither.yml +++ b/.github/workflows/slither.yml @@ -15,13 +15,6 @@ jobs: steps: - uses: actions/checkout@v4 - # Workaround to prevent slither-action from trying to install JS deps. - # Without this step, it detects the `package.json`, and since there is no - # lockfile it defaults `npm install` which fails due to the preinstall - # script to enforce pnpm. https://github.com/crytic/slither-action/issues/44#issuecomment-1338183656 - - name: Remove package.json - run: rm packages/contracts-bedrock/package.json - - name: Run Slither uses: crytic/slither-action@v0.4.0 id: slither diff --git a/ops/docker/Dockerfile.packages b/ops/docker/Dockerfile.packages index 76599b4e90..598f40b3e3 100644 --- a/ops/docker/Dockerfile.packages +++ b/ops/docker/Dockerfile.packages @@ -1,92 +1,52 @@ -# This Dockerfile builds all the dependencies needed by the monorepo, and should -# be used to build any of the follow-on services -# - -# Stage 0 (named `manifests`) collects -# dependency manifest files (`package.json` and `pnpm-lock.yaml`) which are then -# used by stage 1 to install these dependencies -# development. The only reason we need a separate stage just for collecting the -# dependency manifests is that Docker's `COPY` command still does not allow -# copying based on a glob pattern (see this GitHub issue for more details -# https://github.com/moby/moby/issues/15858). Being able to copy only manifests -# into stage 1 (the `COPY --from=manifests` statement) is important to maximize -# Docker build cache hit rate. `alpine` is chosen as the base image for the -# first stage because it's the smallest image that have access to the `cp -# --parents -t` command (by installing the `coreutils` package). -FROM alpine:3.16 as manifests -RUN apk add coreutils - -WORKDIR /tmp -COPY pnpm-lock.yaml pnpm-workspace.yaml .nvmrc package.json ./src/ -COPY packages src/packages/ -RUN mkdir manifests && \ - cd src && \ - # copy package.json recursively - find . -name 'package.json' | xargs cp --parents -t ../manifests/ && \ - # pnpm-lock.yaml - cp pnpm-lock.yaml ../manifests/ && \ - # pnpm-workspace.yaml - cp pnpm-workspace.yaml ../manifests/ && \ - # .nvmrc - cp .nvmrc ../manifests/ +# This Dockerfile builds all the dependencies needed by the smart-contracts, excluding Go and Python. FROM us-docker.pkg.dev/oplabs-tools-artifacts/images/ci-builder:latest as foundry -# bullseye-slim is debian based -# we use it rather than alpine because it's not much -# bigger and alpine is often missing packages for node applications -# alpine is not officially supported by node.js -FROM node:20.8.1-bullseye-slim as base + +# Historically the contracts-bedrock was on the node image based on Debian 11 (bullseye), +# for Node / PNPM compatibility reasons. +# We no longer use Node JS, but continue to use the same Debian version for compatibility. +FROM debian:bullseye-slim as base # Base: install deps RUN apt-get update && apt-get install -y \ curl \ jq \ - python3 \ ca-certificates \ git \ - g++ \ make \ - gcc \ - musl-dev \ bash \ - # the following 4 deps are needed for node-hid - # which is a deep sub dependency of ethers to install - # correctly - pkg-config \ - libusb-1.0-0-dev \ - libudev-dev \ --no-install-recommends COPY /ops/docker/oplabs.crt /usr/local/share/ca-certificates/oplabs.crt RUN chmod 644 /usr/local/share/ca-certificates/oplabs.crt \ && update-ca-certificates -RUN npm install pnpm --global +# Note: "just" is only available on Debian 13. Instead, pull it from the foundry image. +COPY --from=foundry /usr/local/bin/just /usr/local/bin/just COPY --from=foundry /usr/local/bin/forge /usr/local/bin/forge COPY --from=foundry /usr/local/bin/cast /usr/local/bin/cast WORKDIR /opt/optimism -# Copy manifest files into the image in -# preparation for `pnpm install`. -COPY --from=manifests /tmp/manifests ./ -COPY *.json ./ - -RUN pnpm install --frozen-lockfile - +COPY ./versions.json ./versions.json COPY ./packages ./packages COPY .git/ ./.git COPY .gitmodules ./.gitmodules RUN git submodule update --init --recursive +# Not to be confused with OP, this is a OnePassword CLI tool. COPY --from=1password/op:2 /usr/local/bin/op /usr/local/bin/op -RUN pnpm build - -ENTRYPOINT ["pnpm", "run"] +# prebuild the smart-contracts for the convenience of the user +RUN cd packages/contracts-bedrock && just build FROM base as contracts-bedrock WORKDIR /opt/optimism/packages/contracts-bedrock + +# Set "just" as entrypoint, so the default args (the Dockerfile CMD) +# are passed in to it. This was previously "pnpm run" + "deploy". +ENTRYPOINT ["just"] + CMD ["deploy"] diff --git a/package.json b/package.json index 1cfe0a2d43..0da9c83619 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,8 @@ "license": "MIT", "scripts": { "clean": "rm -rf node_modules packages/**/node_modules", - "build": "cd packages/contracts-bedrock && pnpm build", - "test": "cd packages/contracts-bedrock && pnpm test", + "build": "cd packages/contracts-bedrock && just build", + "test": "cd packages/contracts-bedrock && just test", "issues": "./ops/scripts/todo-checker.sh", "lint:shellcheck": "find . -type f -name '*.sh' -not -path '*/node_modules/*' -not -path './packages/contracts-bedrock/lib/*' -not -path './packages/contracts-bedrock/kout*/*' -exec sh -c 'echo \"Checking $1\"; shellcheck \"$1\"' _ {} \\;", "install:foundry": "curl -L https://foundry.paradigm.xyz | bash && pnpm update:foundry", diff --git a/packages/contracts-bedrock/.eslintignore b/packages/contracts-bedrock/.eslintignore deleted file mode 100644 index d8eb5b7a65..0000000000 --- a/packages/contracts-bedrock/.eslintignore +++ /dev/null @@ -1,9 +0,0 @@ -# Deps and test files -lib - -# build output -artifacts -forge-artifacts -cache -coverage* -deployments diff --git a/packages/contracts-bedrock/.eslintrc.js b/packages/contracts-bedrock/.eslintrc.js deleted file mode 100644 index 1895c21485..0000000000 --- a/packages/contracts-bedrock/.eslintrc.js +++ /dev/null @@ -1,185 +0,0 @@ -module.exports = { - root: true, - env: { - browser: true, - es6: true, - }, - ignorePatterns: ['dist', 'coverage'], - extends: ['plugin:prettier/recommended'], - parser: '@babel/eslint-parser', - parserOptions: { - es6: true, - ecmaVersion: 6, - sourceType: 'module', - requireConfigFile: false, - }, - plugins: [ - 'eslint-plugin-import', - 'eslint-plugin-jsdoc', - 'eslint-plugin-prefer-arrow', - '@typescript-eslint', - ], - overrides: [ - { - files: ['**/*.ts'], - parser: '@typescript-eslint/parser', - parserOptions: { - project: './packages/**/tsconfig.json', - sourceType: 'module', - allowAutomaticSingleRunInference: true, - }, - rules: { - '@typescript-eslint/adjacent-overload-signatures': 'error', - '@typescript-eslint/array-type': 'off', - '@typescript-eslint/ban-types': 'off', - '@typescript-eslint/consistent-type-assertions': 'error', - '@typescript-eslint/dot-notation': 'off', - '@typescript-eslint/indent': 'off', - '@typescript-eslint/member-delimiter-style': [ - 'off', - { - multiline: { - delimiter: 'none', - requireLast: true, - }, - singleline: { - delimiter: 'semi', - requireLast: false, - }, - }, - ], - '@typescript-eslint/member-ordering': 'off', - '@typescript-eslint/naming-convention': 'off', - '@typescript-eslint/no-empty-function': 'error', - '@typescript-eslint/no-empty-interface': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-misused-new': 'error', - '@typescript-eslint/no-namespace': 'error', - '@typescript-eslint/no-parameter-properties': 'off', - '@typescript-eslint/no-shadow': [ - 'error', - { - hoist: 'all', - }, - ], - '@typescript-eslint/no-this-alias': 'error', - '@typescript-eslint/no-unused-expressions': 'off', - '@typescript-eslint/no-use-before-define': 'off', - '@typescript-eslint/no-var-requires': 'error', - '@typescript-eslint/prefer-for-of': 'error', - '@typescript-eslint/prefer-function-type': 'error', - '@typescript-eslint/prefer-namespace-keyword': 'error', - '@typescript-eslint/quotes': 'off', - '@typescript-eslint/semi': ['off', null], - '@typescript-eslint/triple-slash-reference': [ - 'error', - { - path: 'always', - types: 'prefer-import', - lib: 'always', - }, - ], - '@typescript-eslint/type-annotation-spacing': 'off', - '@typescript-eslint/unified-signatures': 'error', - '@typescript-eslint/no-unused-vars': 'error', - }, - }, - ], - rules: { - 'prettier/prettier': 'warn', - 'arrow-parens': ['off', 'always'], - 'brace-style': ['off', 'off'], - 'comma-dangle': 'off', - complexity: 'off', - 'constructor-super': 'error', - curly: 'error', - 'dot-notation': 'off', - 'eol-last': 'off', - eqeqeq: ['error', 'smart'], - 'guard-for-in': 'error', - 'id-blacklist': 'off', - 'id-match': 'off', - 'import/no-extraneous-dependencies': ['error'], - 'import/no-internal-modules': 'off', - 'import/order': [ - 'error', - { - groups: ['builtin', 'external', 'internal'], - 'newlines-between': 'always', - }, - ], - indent: 'off', - 'jsdoc/check-alignment': 'error', - 'jsdoc/check-indentation': 'error', - 'linebreak-style': 'off', - 'max-classes-per-file': 'off', - 'max-len': 'off', - 'new-parens': 'off', - 'newline-per-chained-call': 'off', - 'no-bitwise': 'off', - 'no-caller': 'error', - 'no-cond-assign': 'error', - 'no-console': 'off', - 'no-debugger': 'error', - 'no-duplicate-case': 'error', - 'no-duplicate-imports': 'error', - 'no-empty': 'error', - 'no-eval': 'error', - 'no-extra-bind': 'error', - 'no-extra-semi': 'off', - 'no-fallthrough': 'off', - 'no-invalid-this': 'off', - 'no-irregular-whitespace': 'off', - 'no-multiple-empty-lines': 'off', - 'no-new-func': 'error', - 'no-new-wrappers': 'error', - 'no-redeclare': 'error', - 'no-return-await': 'error', - 'no-sequences': 'error', - 'no-sparse-arrays': 'error', - 'no-template-curly-in-string': 'error', - 'no-throw-literal': 'error', - 'no-trailing-spaces': 'off', - 'no-undef-init': 'error', - 'no-underscore-dangle': 'off', - 'no-unsafe-finally': 'error', - 'no-unused-expressions': 'off', - 'no-unused-labels': 'error', - 'no-use-before-define': 'off', - 'no-var': 'error', - 'object-shorthand': 'error', - 'one-var': ['error', 'never'], - 'padded-blocks': [ - 'off', - { - blocks: 'never', - }, - { - allowSingleLineBlocks: true, - }, - ], - 'prefer-arrow/prefer-arrow-functions': 'error', - 'prefer-const': 'error', - 'prefer-object-spread': 'error', - 'quote-props': 'off', - quotes: 'off', - radix: 'error', - 'react/jsx-curly-spacing': 'off', - 'react/jsx-equals-spacing': 'off', - 'react/jsx-tag-spacing': [ - 'off', - { - afterOpening: 'allow', - closingSlash: 'allow', - }, - ], - 'react/jsx-wrap-multilines': 'off', - semi: 'off', - 'space-before-blocks': 'error', - 'space-before-function-paren': 'off', - 'space-in-parens': ['off', 'never'], - 'unicorn/prefer-ternary': 'off', - 'use-isnan': 'error', - 'valid-typeof': 'off', - }, -} diff --git a/packages/contracts-bedrock/.prettierrc.js b/packages/contracts-bedrock/.prettierrc.js deleted file mode 100644 index 7b70850614..0000000000 --- a/packages/contracts-bedrock/.prettierrc.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - $schema: 'http://json.schemastore.org/prettierrc', - plugins: [], - trailingComma: 'es5', - tabWidth: 2, - semi: false, - singleQuote: true, - arrowParens: 'always', - overrides: [], -} diff --git a/packages/contracts-bedrock/CONTRIBUTING.md b/packages/contracts-bedrock/CONTRIBUTING.md index b917d04fab..ddd55464f3 100644 --- a/packages/contracts-bedrock/CONTRIBUTING.md +++ b/packages/contracts-bedrock/CONTRIBUTING.md @@ -52,7 +52,8 @@ The best place to begin contributing is by looking through the issues with the ` Optimism's smart contracts are written in Solidity and we use [foundry](https://github.com/foundry-rs/foundry) as our development framework. To get started, you'll need to install several dependencies: 1. [pnpm](https://pnpm.io) - 1. Make sure to `pnpm install` +1. [just](https://github.com/casey/just) + 1. Make sure to `just install` 1. [foundry](https://getfoundry.sh) 1. Foundry is built with [rust](https://www.rust-lang.org/tools/install), and this project uses a pinned version of foundry. Install the rust toolchain with `rustup`. 1. Make sure to install the version of foundry used by `ci-builder`, defined in the `versions.json` file in the root of this repo under the `foundry` key. Once you have `foundryup` installed, there is a helper to do this: `pnpm install:foundry` @@ -61,20 +62,20 @@ Optimism's smart contracts are written in Solidity and we use [foundry](https:// Our [Style Guide](STYLE_GUIDE.md) contains information about the project structure, syntax preferences, naming conventions, and more. Please take a look at it before submitting a PR, and let us know if you spot inconsistencies! -Once you've read the styleguide and are ready to work on your PR, there are a plethora of useful `pnpm` scripts to know about that will help you with development: -1. `pnpm build` Builds the smart contracts. -1. `pnpm test` Runs the full `forge` test suite. -1 `pnpm gas-snapshot` Generates the gas snapshot for the smart contracts. -1. `pnpm semver-lock` Generates the semver lockfile. -1. `pnpm storage-snapshot` Generates the storage lockfile. -1. `pnpm autogen:invariant-docs` Generates the invariant test documentation. -1. `pnpm clean` Removes all build artifacts for `forge` and `go` compilations. -1. `pnpm validate-spacers` Validates the positions of the storage slot spacers. -1. `pnpm validate-deploy-configs` Validates the deployment configurations in `deploy-config` -1. `pnpm slither` Runs the slither static analysis tool on the smart contracts. -1. `pnpm lint` Runs the linter on the smart contracts and scripts. -1. `pnpm pre-pr` Runs most checks, generators, and linters prior to a PR. For most PRs, this is sufficient to pass CI if everything is in order. -1. `pnpm pre-pr:full` Runs all checks, generators, and linters prior to a PR. +Once you've read the style guide and are ready to work on your PR, there are a plethora of useful `just` scripts to know about that will help you with development. +You can run `just -l` to list them all, some of the key ones are: +1. `just build` Builds the smart contracts. +1. `just test` Runs the full `forge` test suite. +1 `just gas-snapshot` Generates the gas snapshot for the smart contracts. +1. `just semver-lock` Generates the semver lockfile. +1. `just snapshots` Generates the storage and ABI snapshots. +1. `just autogen-invariant-docs` Generates the invariant test documentation. +1. `just clean` Removes all build artifacts for `forge` and `go` compilations. +1. `just validate-spacers` Validates the positions of the storage slot spacers. +1. `just validate-deploy-configs` Validates the deployment configurations in `deploy-config` +1. `just lint` Runs the linter on the smart contracts and scripts. +1. `just pre-pr` Runs most checks, generators, and linters prior to a PR. For most PRs, this is sufficient to pass CI if everything is in order. +1. `just pre-pr-full` Runs all checks, generators, and linters prior to a PR. ### Improving The Documentation @@ -90,11 +91,11 @@ To deploy the smart contracts on a local devnet, run `make devnet-up` in the mon In order to make sure that we don't accidentally overwrite storage slots, contract storage layouts are checked to make sure spacing is correct. -This uses the `.storage-layout` file to check contract spacing. Run `pnpm validate-spacers` to check the spacing of all contracts. +This uses the `snapshots/storageLayout` directory to check contract spacing. Run `just validate-spacers` to check the spacing of all contracts. #### Gas Snapshots -We use forge's `gas-snapshot` subcommand to produce a gas snapshot for most tests within our suite. CI will check that the gas snapshot has been updated properly when it runs, so make sure to run `pnpm gas-snapshot`! +We use forge's `gas-snapshot` subcommand to produce a gas snapshot for tests in `Benchmark.t.sol`. CI will check that the gas snapshot has been updated properly when it runs, so make sure to run `just gas-snapshot`! #### Semver Locking @@ -102,4 +103,4 @@ Many of our smart contracts are semantically versioned. To make sure that change #### Storage Snapshots -Due to the many proxied contracts in Optimism's protocol, we automate tracking the diff to storage layouts of the contracts in the project. This is to ensure that we don't break a proxy by upgrading its implementation to a contract with a different storage layout. To generate the storage lockfile, run `pnpm storage-snapshot`. +Due to the many proxied contracts in Optimism's protocol, we automate tracking the diff to storage layouts of the contracts in the project. This is to ensure that we don't break a proxy by upgrading its implementation to a contract with a different storage layout. To generate the storage lockfile, run `just snapshots`. diff --git a/packages/contracts-bedrock/README.md b/packages/contracts-bedrock/README.md index 50566e9894..ad7edb5065 100644 --- a/packages/contracts-bedrock/README.md +++ b/packages/contracts-bedrock/README.md @@ -361,7 +361,7 @@ to reduce the overhead of maintaining multiple ways to set up the state as well The L1 contract addresses are held in `deployments/hardhat/.deploy` and the L2 test state is held in a `.testdata` directory. The L1 addresses are used to create the L2 state and it is possible for stale addresses to be pulled into the L2 state, causing tests to fail. Stale addresses may happen if the order of the L1 deployments happen differently -since some contracts are deployed using `CREATE`. Run `pnpm clean` and rerun the tests if they are failing for an unknown reason. +since some contracts are deployed using `CREATE`. Run `just clean` and rerun the tests if they are failing for an unknown reason. ### Static Analysis diff --git a/packages/contracts-bedrock/justfile b/packages/contracts-bedrock/justfile new file mode 100644 index 0000000000..b983776e73 --- /dev/null +++ b/packages/contracts-bedrock/justfile @@ -0,0 +1,91 @@ +prebuild: + ./scripts/checks/check-foundry-install.sh + +build: prebuild + forge build + +build-go-ffi: + cd scripts/go-ffi && go build + +autogen-invariant-docs: + go run ./scripts/autogen/generate-invariant-docs . + +test: build-go-ffi + forge test + +test-kontrol: + ./test/kontrol/scripts/run-kontrol.sh script + +genesis: + forge script scripts/L2Genesis.s.sol:L2Genesis --sig 'runWithStateDump()' + +coverage: build-go-ffi + forge coverage || (bash -c "forge coverage 2>&1 | grep -q 'Stack too deep' && echo -e '\\033[1;33mWARNING\\033[0m: Coverage failed with stack too deep, so overriding and exiting successfully' && exit 0 || exit 1") + +coverage-lcov: build-go-ffi + forge coverage --report lcov || (bash -c "forge coverage --report lcov 2>&1 | grep -q 'Stack too deep' && echo -e '\\033[1;33mWARNING\\033[0m: Coverage failed with stack too deep, so overriding and exiting successfully' && exit 0 || exit 1") + +deploy: + ./scripts/deploy/deploy.sh + +gas-snapshot-no-build: + forge snapshot --match-contract GasBenchMark + +statediff: + ./scripts/statediff.sh && git diff --exit-code + +gas-snapshot: build-go-ffi gas-snapshot-no-build + +gas-snapshot-check: build-go-ffi + forge snapshot --match-contract GasBenchMark --check + +kontrol-summary: + ./test/kontrol/scripts/make-summary-deployment.sh + +kontrol-summary-fp: + KONTROL_FP_DEPLOYMENT=true ./test/kontrol/scripts/make-summary-deployment.sh + +snapshots-abi-storage: + go run ./scripts/autogen/generate-snapshots . + +snapshots: build snapshots-no-build + +snapshots-no-build: snapshots-abi-storage kontrol-summary-fp kontrol-summary + +snapshots-check: + ./scripts/checks/check-snapshots.sh + +semver-lock: + forge script scripts/SemverLock.s.sol + +validate-deploy-configs: + ./scripts/checks/check-deploy-configs.sh + +validate-spacers-no-build: + go run ./scripts/checks/spacers + +validate-spacers: build validate-spacers-no-build + +clean: + rm -rf ./artifacts ./forge-artifacts ./cache ./scripts/go-ffi/go-ffi ./.testdata ./deployments/hardhat/* + +pre-pr-no-build: gas-snapshot-no-build snapshots-no-build semver-lock autogen-invariant-docs lint + +pre-pr: clean build-go-ffi build pre-pr-no-build + +pre-pr-full: test validate-deploy-configs validate-spacers pre-pr + +lint-forge-tests-check: + go run ./scripts/checks/names + +lint-contracts-check: + forge fmt --check + +lint-check: lint-contracts-check + +lint-contracts-fix: + forge fmt + +lint-fix: lint-contracts-fix + +lint: lint-fix lint-check diff --git a/packages/contracts-bedrock/package.json b/packages/contracts-bedrock/package.json deleted file mode 100644 index 1cf9873abb..0000000000 --- a/packages/contracts-bedrock/package.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "name": "@eth-optimism/contracts-bedrock", - "version": "0.17.3", - "description": "Contracts for Optimism Specs", - "license": "MIT", - "engines": { - "node": ">=16", - "pnpm": ">=9" - }, - "files": [ - "forge-artifacts/**/*.json", - "!forge-artifacts/**/*.t.sol/*.json", - "deployments/**/*.json", - "src/**/*.sol" - ], - "scripts": { - "prebuild": "./scripts/checks/check-foundry-install.sh", - "build": "forge build", - "build:go-ffi": "(cd scripts/go-ffi && go build)", - "autogen:invariant-docs": "go run ./scripts/autogen/generate-invariant-docs .", - "test": "pnpm build:go-ffi && forge test", - "test:kontrol": "./test/kontrol/scripts/run-kontrol.sh script", - "genesis": "forge script scripts/L2Genesis.s.sol:L2Genesis --sig 'runWithStateDump()'", - "coverage": "pnpm build:go-ffi && (forge coverage || (bash -c \"forge coverage 2>&1 | grep -q 'Stack too deep' && echo -e '\\033[1;33mWARNING\\033[0m: Coverage failed with stack too deep, so overriding and exiting successfully' && exit 0 || exit 1\"))", - "coverage:lcov": "pnpm build:go-ffi && (forge coverage --report lcov || (bash -c \"forge coverage --report lcov 2>&1 | grep -q 'Stack too deep' && echo -e '\\033[1;33mWARNING\\033[0m: Coverage failed with stack too deep, so overriding and exiting successfully' && exit 0 || exit 1\"))", - "deploy": "./scripts/deploy/deploy.sh", - "gas-snapshot:no-build": "forge snapshot --match-contract GasBenchMark", - "statediff": "./scripts/statediff.sh && git diff --exit-code", - "gas-snapshot": "pnpm build:go-ffi && pnpm gas-snapshot:no-build", - "kontrol-summary": "./test/kontrol/scripts/make-summary-deployment.sh", - "kontrol-summary-fp": "KONTROL_FP_DEPLOYMENT=true pnpm kontrol-summary", - "snapshots": "forge build && go run ./scripts/autogen/generate-snapshots . && pnpm kontrol-summary-fp && pnpm kontrol-summary", - "snapshots:check": "./scripts/checks/check-snapshots.sh", - "semver-lock": "forge script scripts/SemverLock.s.sol", - "validate-deploy-configs": "./scripts/checks/check-deploy-configs.sh", - "validate-spacers:no-build": "go run ./scripts/checks/spacers", - "validate-spacers": "pnpm build && pnpm validate-spacers:no-build", - "clean": "rm -rf ./artifacts ./forge-artifacts ./cache ./tsconfig.tsbuildinfo ./tsconfig.build.tsbuildinfo ./scripts/go-ffi/go-ffi ./.testdata ./deployments/hardhat/*", - "pre-pr:no-build": "pnpm gas-snapshot:no-build && pnpm snapshots && pnpm semver-lock && pnpm autogen:invariant-docs && pnpm lint", - "pre-pr": "pnpm clean && pnpm build:go-ffi && pnpm build && pnpm pre-pr:no-build", - "pre-pr:full": "pnpm test && pnpm validate-deploy-configs && pnpm validate-spacers && pnpm pre-pr", - "lint:ts:check": "eslint . --max-warnings=0", - "lint:forge-tests:check": "go run ./scripts/checks/names", - "lint:contracts:check": "pnpm lint:fix && git diff --exit-code", - "lint:check": "pnpm lint:contracts:check && pnpm lint:ts:check", - "lint:ts:fix": "eslint --fix .", - "lint:contracts:fix": "forge fmt", - "lint:fix": "pnpm lint:contracts:fix && pnpm lint:ts:fix", - "lint": "pnpm lint:fix && pnpm lint:check" - }, - "devDependencies": { - "@babel/eslint-parser": "^7.23.10", - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", - "@types/node": "^20.14.12", - "doctoc": "^2.2.0", - "eslint": "^8.56.0", - "eslint-config-prettier": "^9.1.0", - "eslint-config-standard": "^16.0.3", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jsdoc": "^48.8.3", - "eslint-plugin-prefer-arrow": "^1.2.3", - "eslint-plugin-prettier": "^4.0.0", - "prettier": "^2.8.0", - "tsx": "^4.16.2", - "typescript": "^5.5.4" - } -} diff --git a/packages/contracts-bedrock/pnpm-lock.yaml b/packages/contracts-bedrock/pnpm-lock.yaml deleted file mode 100644 index df27013816..0000000000 --- a/packages/contracts-bedrock/pnpm-lock.yaml +++ /dev/null @@ -1,3483 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - devDependencies: - '@babel/eslint-parser': - specifier: ^7.23.10 - version: 7.25.0(@babel/core@7.24.9)(eslint@8.56.0) - '@types/node': - specifier: ^20.14.12 - version: 20.14.12 - '@typescript-eslint/eslint-plugin': - specifier: ^6.21.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0)(typescript@5.5.4) - '@typescript-eslint/parser': - specifier: ^6.21.0 - version: 6.21.0(eslint@8.56.0)(typescript@5.5.4) - doctoc: - specifier: ^2.2.0 - version: 2.2.1 - eslint: - specifier: ^8.56.0 - version: 8.56.0 - eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.0(eslint@8.56.0) - eslint-config-standard: - specifier: ^16.0.3 - version: 16.0.3(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0))(eslint-plugin-node@11.1.0(eslint@8.56.0))(eslint-plugin-promise@5.2.0(eslint@8.56.0))(eslint@8.56.0) - eslint-plugin-import: - specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0) - eslint-plugin-jsdoc: - specifier: ^48.8.3 - version: 48.8.3(eslint@8.56.0) - eslint-plugin-prefer-arrow: - specifier: ^1.2.3 - version: 1.2.3(eslint@8.56.0) - eslint-plugin-prettier: - specifier: ^4.0.0 - version: 4.2.1(eslint-config-prettier@9.1.0(eslint@8.56.0))(eslint@8.56.0)(prettier@2.8.8) - prettier: - specifier: ^2.8.0 - version: 2.8.8 - tsx: - specifier: ^4.16.2 - version: 4.16.2 - typescript: - specifier: ^5.5.4 - version: 5.5.4 - - packages/contracts-bedrock: - devDependencies: - '@typescript-eslint/eslint-plugin': - specifier: ^6.21.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0)(typescript@5.5.4) - '@typescript-eslint/parser': - specifier: ^6.21.0 - version: 6.21.0(eslint@8.56.0)(typescript@5.5.4) - tsx: - specifier: ^4.16.2 - version: 4.16.2 - typescript: - specifier: ^5.5.4 - version: 5.5.4 - -packages: - - '@aashutoshrathi/word-wrap@1.2.6': - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.25.0': - resolution: {integrity: sha512-P4fwKI2mjEb3ZU5cnMJzvRsRKGBUcs8jvxIoRmr6ufAY9Xk2Bz7JubRTTivkw55c7WQJfTECeqYVa+HZ0FzREg==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.24.9': - resolution: {integrity: sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==} - engines: {node: '>=6.9.0'} - - '@babel/eslint-parser@7.25.0': - resolution: {integrity: sha512-mlcTKuQAjczDRwWLIxv+Q925jaMUO8Jl5dxmWJSSGVYfZ4rKMp8daQvVC3rM1G2v8V+/fO0yIVTSLS+2zcB8rg==} - engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} - peerDependencies: - '@babel/core': ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 - - '@babel/generator@7.25.0': - resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.24.8': - resolution: {integrity: sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.24.7': - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.25.0': - resolution: {integrity: sha512-bIkOa2ZJYn7FHnepzr5iX9Kmz8FjIz4UKzJ9zhX3dnYuVW0xul9RuR3skBfoLu+FPTQw90EHW9rJsSZhyLQ3fQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-simple-access@7.24.7': - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.24.8': - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.24.8': - resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.25.0': - resolution: {integrity: sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==} - engines: {node: '>=6.9.0'} - - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.25.0': - resolution: {integrity: sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/template@7.25.0': - resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.25.0': - resolution: {integrity: sha512-ubALThHQy4GCf6mbb+5ZRNmLLCI7bJ3f8Q6LHBSRlSKSWj5a7dSUzJBLv3VuIhFrFPgjF4IzPF567YG/HSCdZA==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.25.0': - resolution: {integrity: sha512-LcnxQSsd9aXOIgmmSpvZ/1yo46ra2ESYyqLcryaBZOghxy5qqOBjvCWP5JfkI8yl9rlxRgdLTTMCQQRcN2hdCg==} - engines: {node: '>=6.9.0'} - - '@es-joy/jsdoccomment@0.46.0': - resolution: {integrity: sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ==} - engines: {node: '>=16'} - - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.6.2': - resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@eslint/js@8.56.0': - resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@humanwhocodes/config-array@0.11.13': - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/object-schema@2.0.1': - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} - deprecated: Use @eslint/object-schema instead - - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@pkgr/core@0.1.1': - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - - '@textlint/ast-node-types@12.6.1': - resolution: {integrity: sha512-uzlJ+ZsCAyJm+lBi7j0UeBbj+Oy6w/VWoGJ3iHRHE5eZ8Z4iK66mq+PG/spupmbllLtz77OJbY89BYqgFyjXmA==} - - '@textlint/markdown-to-ast@12.6.1': - resolution: {integrity: sha512-T0HO+VrU9VbLRiEx/kH4+gwGMHNMIGkp0Pok+p0I33saOOLyhfGvwOKQgvt2qkxzQEV2L5MtGB8EnW4r5d3CqQ==} - - '@types/json-schema@7.0.12': - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} - - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - - '@types/mdast@3.0.15': - resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} - - '@types/node@20.14.12': - resolution: {integrity: sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==} - - '@types/semver@7.5.7': - resolution: {integrity: sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==} - - '@types/unist@2.0.10': - resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} - - '@typescript-eslint/eslint-plugin@6.21.0': - resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/parser@6.21.0': - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/scope-manager@6.21.0': - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/type-utils@6.21.0': - resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/types@6.21.0': - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/typescript-estree@6.21.0': - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/utils@6.21.0': - resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - - '@typescript-eslint/visitor-keys@6.21.0': - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} - engines: {node: '>=0.4.0'} - hasBin: true - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - anchor-markdown-header@0.6.0: - resolution: {integrity: sha512-v7HJMtE1X7wTpNFseRhxsY/pivP4uAJbidVhPT+yhz4i/vV1+qx371IXuV9V7bN6KjFtheLJxqaSm0Y/8neJTA==} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - are-docs-informative@0.0.2: - resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} - engines: {node: '>=14'} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} - - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} - - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - - array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} - - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - - bail@1.0.5: - resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - - browserslist@4.23.2: - resolution: {integrity: sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - caniuse-lite@1.0.30001643: - resolution: {integrity: sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==} - - ccount@1.1.0: - resolution: {integrity: sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==} - - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - character-entities-legacy@1.1.4: - resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} - - character-entities@1.2.4: - resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} - - character-reference-invalid@1.1.4: - resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} - - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - comment-parser@1.4.1: - resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} - engines: {node: '>= 12.0.0'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - - data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} - - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - - doctoc@2.2.1: - resolution: {integrity: sha512-qNJ1gsuo7hH40vlXTVVrADm6pdg30bns/Mo7Nv1SxuXSM1bwF9b4xQ40a6EFT/L1cI+Yylbyi8MPI4G4y7XJzQ==} - hasBin: true - - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - - dom-serializer@1.4.1: - resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} - - domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - - domhandler@4.3.1: - resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} - engines: {node: '>= 4'} - - domutils@2.8.0: - resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - - electron-to-chromium@1.5.2: - resolution: {integrity: sha512-kc4r3U3V3WLaaZqThjYz/Y6z8tJe+7K0bbjUVo3i+LWIypVdMx5nXCkwRe6SWbY6ILqLdc1rKcKmr3HoH7wjSQ==} - - emoji-regex@10.1.0: - resolution: {integrity: sha512-xAEnNCT3w2Tg6MA7ly6QqYJvEoY1tm9iIjJ3yMKK9JPlWuRHAMoe5iETwQnx3M9TVbFMfsrBgWKR+IsmswwNjg==} - - entities@2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - - entities@3.0.1: - resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} - engines: {node: '>=0.12'} - - es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-module-lexer@1.5.4: - resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} - - es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} - hasBin: true - - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - eslint-config-prettier@9.1.0: - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-config-standard@16.0.3: - resolution: {integrity: sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==} - peerDependencies: - eslint: ^7.12.1 - eslint-plugin-import: ^2.22.1 - eslint-plugin-node: ^11.1.0 - eslint-plugin-promise: ^4.2.1 || ^5.0.0 - - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - - eslint-module-utils@2.8.1: - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - - eslint-plugin-es@3.0.1: - resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=4.19.1' - - eslint-plugin-import@2.29.1: - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - - eslint-plugin-jsdoc@48.8.3: - resolution: {integrity: sha512-AtIvwwW9D17MRkM0Z0y3/xZYaa9mdAvJrkY6fU/HNUwGbmMtHVvK4qRM9CDixGVtfNrQitb8c6zQtdh6cTOvLg==} - engines: {node: '>=18'} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - - eslint-plugin-node@11.1.0: - resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=5.16.0' - - eslint-plugin-prefer-arrow@1.2.3: - resolution: {integrity: sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==} - peerDependencies: - eslint: '>=2.0.0' - - eslint-plugin-prettier@4.2.1: - resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} - engines: {node: '>=12.0.0'} - peerDependencies: - eslint: '>=7.28.0' - eslint-config-prettier: '*' - prettier: '>=2.0.0' - peerDependenciesMeta: - eslint-config-prettier: - optional: true - - eslint-plugin-promise@5.2.0: - resolution: {integrity: sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw==} - engines: {node: ^10.12.0 || >=12.0.0} - peerDependencies: - eslint: ^7.0.0 - - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-utils@2.1.0: - resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} - engines: {node: '>=6'} - - eslint-visitor-keys@1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} - engines: {node: '>=4'} - - eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint@8.56.0: - resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - - fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} - engines: {node: '>=8.6.0'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - - fault@1.0.4: - resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} - - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} - - flatted@3.2.2: - resolution: {integrity: sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==} - - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - - format@0.2.2: - resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} - engines: {node: '>=0.4.x'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} - - get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} - - get-tsconfig@4.7.5: - resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - - globals@13.21.0: - resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} - engines: {node: '>=8'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - htmlparser2@7.2.0: - resolution: {integrity: sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==} - - ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} - - is-alphabetical@1.0.4: - resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} - - is-alphanumerical@1.0.4: - resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} - - is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} - - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - - is-buffer@2.0.5: - resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} - engines: {node: '>=4'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.15.0: - resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} - - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - - is-decimal@1.0.4: - resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-hexadecimal@1.0.4: - resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - - is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} - - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} - - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - jsdoc-type-pratt-parser@4.0.0: - resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} - engines: {node: '>=12.0.0'} - - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - longest-streak@2.0.4: - resolution: {integrity: sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - markdown-table@2.0.0: - resolution: {integrity: sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==} - - mdast-util-find-and-replace@1.1.1: - resolution: {integrity: sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==} - - mdast-util-footnote@0.1.7: - resolution: {integrity: sha512-QxNdO8qSxqbO2e3m09KwDKfWiLgqyCurdWTQ198NpbZ2hxntdc+VKS4fDJCmNWbAroUdYnSthu+XbZ8ovh8C3w==} - - mdast-util-from-markdown@0.8.5: - resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} - - mdast-util-frontmatter@0.2.0: - resolution: {integrity: sha512-FHKL4w4S5fdt1KjJCwB0178WJ0evnyyQr5kXTM3wrOVpytD0hrkvd+AOOjU9Td8onOejCkmZ+HQRT3CZ3coHHQ==} - - mdast-util-gfm-autolink-literal@0.1.3: - resolution: {integrity: sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==} - - mdast-util-gfm-strikethrough@0.2.3: - resolution: {integrity: sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==} - - mdast-util-gfm-table@0.1.6: - resolution: {integrity: sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==} - - mdast-util-gfm-task-list-item@0.1.6: - resolution: {integrity: sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==} - - mdast-util-gfm@0.1.2: - resolution: {integrity: sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==} - - mdast-util-to-markdown@0.6.5: - resolution: {integrity: sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==} - - mdast-util-to-string@2.0.0: - resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromark-extension-footnote@0.3.2: - resolution: {integrity: sha512-gr/BeIxbIWQoUm02cIfK7mdMZ/fbroRpLsck4kvFtjbzP4yi+OPVbnukTc/zy0i7spC2xYE/dbX1Sur8BEDJsQ==} - - micromark-extension-frontmatter@0.2.2: - resolution: {integrity: sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A==} - - micromark-extension-gfm-autolink-literal@0.5.7: - resolution: {integrity: sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==} - - micromark-extension-gfm-strikethrough@0.6.5: - resolution: {integrity: sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==} - - micromark-extension-gfm-table@0.4.3: - resolution: {integrity: sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==} - - micromark-extension-gfm-tagfilter@0.3.0: - resolution: {integrity: sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==} - - micromark-extension-gfm-task-list-item@0.3.3: - resolution: {integrity: sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==} - - micromark-extension-gfm@0.3.3: - resolution: {integrity: sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==} - - micromark@2.11.4: - resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} - - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} - - object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} - - object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} - engines: {node: '>= 0.4'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parse-entities@2.0.0: - resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} - - parse-imports@2.1.1: - resolution: {integrity: sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==} - engines: {node: '>= 18'} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} - - prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} - hasBin: true - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} - - regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - - remark-footnotes@3.0.0: - resolution: {integrity: sha512-ZssAvH9FjGYlJ/PBVKdSmfyPc3Cz4rTWgZLI4iE/SX8Nt5l3o3oEjv3wwG5VD7xOjktzdwp5coac+kJV9l4jgg==} - - remark-frontmatter@3.0.0: - resolution: {integrity: sha512-mSuDd3svCHs+2PyO29h7iijIZx4plX0fheacJcAoYAASfgzgVIcXGYSq9GFyYocFLftQs8IOmmkgtOovs6d4oA==} - - remark-gfm@1.0.0: - resolution: {integrity: sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==} - - remark-parse@9.0.0: - resolution: {integrity: sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==} - - repeat-string@1.6.1: - resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} - engines: {node: '>=0.10'} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} - - safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} - engines: {node: '>=10'} - hasBin: true - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - slashes@3.0.12: - resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} - - spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - - spdx-expression-parse@4.0.0: - resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} - - spdx-license-ids@3.0.18: - resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} - - string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - synckit@0.9.1: - resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} - engines: {node: ^14.18.0 || >=16.0.0} - - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - traverse@0.6.9: - resolution: {integrity: sha512-7bBrcF+/LQzSgFmT0X5YclVqQxtv7TDJ1f8Wj7ibBu/U6BMLeOpUxuZjV7rMc44UtKxlnMFigdhFAIszSX1DMg==} - engines: {node: '>= 0.4'} - - trough@1.0.5: - resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} - - ts-api-utils@1.0.1: - resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==} - engines: {node: '>=16.13.0'} - peerDependencies: - typescript: '>=4.2.0' - - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - - tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} - - tsx@4.16.2: - resolution: {integrity: sha512-C1uWweJDgdtX2x600HjaFaucXTilT7tgUZHbOE4+ypskZ1OP8CRCSDkCxG6Vya9EwaFIVagWwpaVAn5wzypaqQ==} - engines: {node: '>=18.0.0'} - hasBin: true - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - - typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} - - typedarray.prototype.slice@1.0.3: - resolution: {integrity: sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==} - engines: {node: '>= 0.4'} - - typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} - engines: {node: '>=14.17'} - hasBin: true - - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - - underscore@1.13.7: - resolution: {integrity: sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==} - - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - unified@9.2.2: - resolution: {integrity: sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==} - - unist-util-is@4.1.0: - resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} - - unist-util-stringify-position@2.0.3: - resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} - - unist-util-visit-parents@3.1.1: - resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} - - update-browserslist-db@1.1.0: - resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - update-section@0.3.3: - resolution: {integrity: sha512-BpRZMZpgXLuTiKeiu7kK0nIPwGdyrqrs6EDSaXtjD/aQ2T+qVo9a5hRC3HN3iJjCMxNT/VxoLGQ7E/OzE5ucnw==} - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - vfile-message@2.0.4: - resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} - - vfile@4.2.1: - resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} - - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - - which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - - zwitch@1.0.5: - resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} - -snapshots: - - '@aashutoshrathi/word-wrap@1.2.6': {} - - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - '@babel/code-frame@7.24.7': - dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.0.1 - - '@babel/compat-data@7.25.0': {} - - '@babel/core@7.24.9': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.0 - '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-module-transforms': 7.25.0(@babel/core@7.24.9) - '@babel/helpers': 7.25.0 - '@babel/parser': 7.25.0 - '@babel/template': 7.25.0 - '@babel/traverse': 7.25.0 - '@babel/types': 7.25.0 - convert-source-map: 2.0.0 - debug: 4.3.5 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/eslint-parser@7.25.0(@babel/core@7.24.9)(eslint@8.56.0)': - dependencies: - '@babel/core': 7.24.9 - '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.56.0 - eslint-visitor-keys: 2.1.0 - semver: 6.3.1 - - '@babel/generator@7.25.0': - dependencies: - '@babel/types': 7.25.0 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - - '@babel/helper-compilation-targets@7.24.8': - dependencies: - '@babel/compat-data': 7.25.0 - '@babel/helper-validator-option': 7.24.8 - browserslist: 4.23.2 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-module-imports@7.24.7': - dependencies: - '@babel/traverse': 7.25.0 - '@babel/types': 7.25.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.25.0(@babel/core@7.24.9)': - dependencies: - '@babel/core': 7.24.9 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-simple-access@7.24.7': - dependencies: - '@babel/traverse': 7.25.0 - '@babel/types': 7.25.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-string-parser@7.24.8': {} - - '@babel/helper-validator-identifier@7.24.7': {} - - '@babel/helper-validator-option@7.24.8': {} - - '@babel/helpers@7.25.0': - dependencies: - '@babel/template': 7.25.0 - '@babel/types': 7.25.0 - - '@babel/highlight@7.24.7': - dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.1 - - '@babel/parser@7.25.0': - dependencies: - '@babel/types': 7.25.0 - - '@babel/template@7.25.0': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.25.0 - '@babel/types': 7.25.0 - - '@babel/traverse@7.25.0': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.0 - '@babel/parser': 7.25.0 - '@babel/template': 7.25.0 - '@babel/types': 7.25.0 - debug: 4.3.5 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.25.0': - dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - - '@es-joy/jsdoccomment@0.46.0': - dependencies: - comment-parser: 1.4.1 - esquery: 1.6.0 - jsdoc-type-pratt-parser: 4.0.0 - - '@esbuild/aix-ppc64@0.21.5': - optional: true - - '@esbuild/android-arm64@0.21.5': - optional: true - - '@esbuild/android-arm@0.21.5': - optional: true - - '@esbuild/android-x64@0.21.5': - optional: true - - '@esbuild/darwin-arm64@0.21.5': - optional: true - - '@esbuild/darwin-x64@0.21.5': - optional: true - - '@esbuild/freebsd-arm64@0.21.5': - optional: true - - '@esbuild/freebsd-x64@0.21.5': - optional: true - - '@esbuild/linux-arm64@0.21.5': - optional: true - - '@esbuild/linux-arm@0.21.5': - optional: true - - '@esbuild/linux-ia32@0.21.5': - optional: true - - '@esbuild/linux-loong64@0.21.5': - optional: true - - '@esbuild/linux-mips64el@0.21.5': - optional: true - - '@esbuild/linux-ppc64@0.21.5': - optional: true - - '@esbuild/linux-riscv64@0.21.5': - optional: true - - '@esbuild/linux-s390x@0.21.5': - optional: true - - '@esbuild/linux-x64@0.21.5': - optional: true - - '@esbuild/netbsd-x64@0.21.5': - optional: true - - '@esbuild/openbsd-x64@0.21.5': - optional: true - - '@esbuild/sunos-x64@0.21.5': - optional: true - - '@esbuild/win32-arm64@0.21.5': - optional: true - - '@esbuild/win32-ia32@0.21.5': - optional: true - - '@esbuild/win32-x64@0.21.5': - optional: true - - '@eslint-community/eslint-utils@4.4.0(eslint@8.56.0)': - dependencies: - eslint: 8.56.0 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.6.2': {} - - '@eslint/eslintrc@2.1.4': - dependencies: - ajv: 6.12.6 - debug: 4.3.5 - espree: 9.6.1 - globals: 13.21.0 - ignore: 5.2.4 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@8.56.0': {} - - '@humanwhocodes/config-array@0.11.13': - dependencies: - '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.5 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/object-schema@2.0.1': {} - - '@jridgewell/gen-mapping@0.3.5': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': - dependencies: - eslint-scope: 5.1.1 - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - - '@pkgr/core@0.1.1': {} - - '@textlint/ast-node-types@12.6.1': {} - - '@textlint/markdown-to-ast@12.6.1': - dependencies: - '@textlint/ast-node-types': 12.6.1 - debug: 4.3.5 - mdast-util-gfm-autolink-literal: 0.1.3 - remark-footnotes: 3.0.0 - remark-frontmatter: 3.0.0 - remark-gfm: 1.0.0 - remark-parse: 9.0.0 - traverse: 0.6.9 - unified: 9.2.2 - transitivePeerDependencies: - - supports-color - - '@types/json-schema@7.0.12': {} - - '@types/json5@0.0.29': {} - - '@types/mdast@3.0.15': - dependencies: - '@types/unist': 2.0.10 - - '@types/node@20.14.12': - dependencies: - undici-types: 5.26.5 - - '@types/semver@7.5.7': {} - - '@types/unist@2.0.10': {} - - '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0)(typescript@5.5.4)': - dependencies: - '@eslint-community/regexpp': 4.6.2 - '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.5 - eslint: 8.56.0 - graphemer: 1.4.0 - ignore: 5.2.4 - natural-compare: 1.4.0 - semver: 7.6.3 - ts-api-utils: 1.0.1(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4)': - dependencies: - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.5 - eslint: 8.56.0 - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - - '@typescript-eslint/type-utils@6.21.0(eslint@8.56.0)(typescript@5.5.4)': - dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) - '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - debug: 4.3.5 - eslint: 8.56.0 - ts-api-utils: 1.0.1(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@6.21.0': {} - - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4)': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.5 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.3 - ts-api-utils: 1.0.1(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@6.21.0(eslint@8.56.0)(typescript@5.5.4)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@types/json-schema': 7.0.12 - '@types/semver': 7.5.7 - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) - eslint: 8.56.0 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/visitor-keys@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - eslint-visitor-keys: 3.4.3 - - '@ungap/structured-clone@1.2.0': {} - - acorn-jsx@5.3.2(acorn@8.10.0): - dependencies: - acorn: 8.10.0 - - acorn@8.10.0: {} - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - anchor-markdown-header@0.6.0: - dependencies: - emoji-regex: 10.1.0 - - ansi-regex@5.0.1: {} - - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - are-docs-informative@0.0.2: {} - - argparse@2.0.1: {} - - array-buffer-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 - - array-includes@3.1.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - is-string: 1.0.7 - - array-union@2.1.0: {} - - array.prototype.findlastindex@1.2.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 - - array.prototype.flat@1.3.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - - array.prototype.flatmap@1.3.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - - arraybuffer.prototype.slice@1.0.3: - dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.0.0 - - bail@1.0.5: {} - - balanced-match@1.0.2: {} - - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.1: - dependencies: - balanced-match: 1.0.2 - - braces@3.0.2: - dependencies: - fill-range: 7.0.1 - - browserslist@4.23.2: - dependencies: - caniuse-lite: 1.0.30001643 - electron-to-chromium: 1.5.2 - node-releases: 2.0.18 - update-browserslist-db: 1.1.0(browserslist@4.23.2) - - call-bind@1.0.7: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 - - callsites@3.1.0: {} - - caniuse-lite@1.0.30001643: {} - - ccount@1.1.0: {} - - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - character-entities-legacy@1.1.4: {} - - character-entities@1.2.4: {} - - character-reference-invalid@1.1.4: {} - - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.3: {} - - color-name@1.1.4: {} - - comment-parser@1.4.1: {} - - concat-map@0.0.1: {} - - convert-source-map@2.0.0: {} - - cross-spawn@7.0.3: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - data-view-buffer@1.0.1: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - data-view-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - data-view-byte-offset@1.0.0: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - debug@3.2.7: - dependencies: - ms: 2.1.2 - - debug@4.3.5: - dependencies: - ms: 2.1.2 - - deep-is@0.1.4: {} - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - gopd: 1.0.1 - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - - doctoc@2.2.1: - dependencies: - '@textlint/markdown-to-ast': 12.6.1 - anchor-markdown-header: 0.6.0 - htmlparser2: 7.2.0 - minimist: 1.2.8 - underscore: 1.13.7 - update-section: 0.3.3 - transitivePeerDependencies: - - supports-color - - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - - dom-serializer@1.4.1: - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - entities: 2.2.0 - - domelementtype@2.3.0: {} - - domhandler@4.3.1: - dependencies: - domelementtype: 2.3.0 - - domutils@2.8.0: - dependencies: - dom-serializer: 1.4.1 - domelementtype: 2.3.0 - domhandler: 4.3.1 - - electron-to-chromium@1.5.2: {} - - emoji-regex@10.1.0: {} - - entities@2.2.0: {} - - entities@3.0.1: {} - - es-abstract@1.23.3: - dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.2 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 - - es-errors@1.3.0: {} - - es-module-lexer@1.5.4: {} - - es-object-atoms@1.0.0: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.0.3: - dependencies: - get-intrinsic: 1.2.4 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-shim-unscopables@1.0.2: - dependencies: - hasown: 2.0.2 - - es-to-primitive@1.2.1: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - - esbuild@0.21.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 - - escalade@3.1.2: {} - - escape-string-regexp@1.0.5: {} - - escape-string-regexp@4.0.0: {} - - eslint-config-prettier@9.1.0(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - - eslint-config-standard@16.0.3(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0))(eslint-plugin-node@11.1.0(eslint@8.56.0))(eslint-plugin-promise@5.2.0(eslint@8.56.0))(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0) - eslint-plugin-node: 11.1.0(eslint@8.56.0) - eslint-plugin-promise: 5.2.0(eslint@8.56.0) - - eslint-import-resolver-node@0.3.9: - dependencies: - debug: 3.2.7 - is-core-module: 2.15.0 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - - eslint-plugin-es@3.0.1(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - eslint-utils: 2.1.0 - regexpp: 3.2.0 - - eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0): - dependencies: - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) - hasown: 2.0.2 - is-core-module: 2.15.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.0 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-jsdoc@48.8.3(eslint@8.56.0): - dependencies: - '@es-joy/jsdoccomment': 0.46.0 - are-docs-informative: 0.0.2 - comment-parser: 1.4.1 - debug: 4.3.5 - escape-string-regexp: 4.0.0 - eslint: 8.56.0 - esquery: 1.6.0 - parse-imports: 2.1.1 - semver: 7.6.3 - spdx-expression-parse: 4.0.0 - synckit: 0.9.1 - transitivePeerDependencies: - - supports-color - - eslint-plugin-node@11.1.0(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - eslint-plugin-es: 3.0.1(eslint@8.56.0) - eslint-utils: 2.1.0 - ignore: 5.2.4 - minimatch: 3.1.2 - resolve: 1.22.8 - semver: 6.3.1 - - eslint-plugin-prefer-arrow@1.2.3(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - - eslint-plugin-prettier@4.2.1(eslint-config-prettier@9.1.0(eslint@8.56.0))(eslint@8.56.0)(prettier@2.8.8): - dependencies: - eslint: 8.56.0 - prettier: 2.8.8 - prettier-linter-helpers: 1.0.0 - optionalDependencies: - eslint-config-prettier: 9.1.0(eslint@8.56.0) - - eslint-plugin-promise@5.2.0(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - - eslint-scope@5.1.1: - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - - eslint-scope@7.2.2: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-utils@2.1.0: - dependencies: - eslint-visitor-keys: 1.3.0 - - eslint-visitor-keys@1.3.0: {} - - eslint-visitor-keys@2.1.0: {} - - eslint-visitor-keys@3.4.3: {} - - eslint@8.56.0: - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@eslint-community/regexpp': 4.6.2 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.56.0 - '@humanwhocodes/config-array': 0.11.13 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.5 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.21.0 - graphemer: 1.4.0 - ignore: 5.2.4 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - - espree@9.6.1: - dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) - eslint-visitor-keys: 3.4.3 - - esquery@1.5.0: - dependencies: - estraverse: 5.3.0 - - esquery@1.6.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@4.3.0: {} - - estraverse@5.3.0: {} - - esutils@2.0.3: {} - - extend@3.0.2: {} - - fast-deep-equal@3.1.3: {} - - fast-diff@1.3.0: {} - - fast-glob@3.3.1: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - - fastq@1.15.0: - dependencies: - reusify: 1.0.4 - - fault@1.0.4: - dependencies: - format: 0.2.2 - - file-entry-cache@6.0.1: - dependencies: - flat-cache: 3.0.4 - - fill-range@7.0.1: - dependencies: - to-regex-range: 5.0.1 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat-cache@3.0.4: - dependencies: - flatted: 3.2.2 - rimraf: 3.0.2 - - flatted@3.2.2: {} - - for-each@0.3.3: - dependencies: - is-callable: 1.2.7 - - format@0.2.2: {} - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - function.prototype.name@1.1.6: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - functions-have-names: 1.2.3 - - functions-have-names@1.2.3: {} - - gensync@1.0.0-beta.2: {} - - get-intrinsic@1.2.4: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - - get-symbol-description@1.0.2: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - - get-tsconfig@4.7.5: - dependencies: - resolve-pkg-maps: 1.0.0 - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - globals@11.12.0: {} - - globals@13.21.0: - dependencies: - type-fest: 0.20.2 - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.0.1 - - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.1 - ignore: 5.2.4 - merge2: 1.4.1 - slash: 3.0.0 - - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.4 - - graphemer@1.4.0: {} - - has-bigints@1.0.2: {} - - has-flag@3.0.0: {} - - has-flag@4.0.0: {} - - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.0 - - has-proto@1.0.3: {} - - has-symbols@1.0.3: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.0.3 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - htmlparser2@7.2.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - domutils: 2.8.0 - entities: 3.0.1 - - ignore@5.2.4: {} - - import-fresh@3.3.0: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - imurmurhash@0.1.4: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - internal-slot@1.0.7: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.0.6 - - is-alphabetical@1.0.4: {} - - is-alphanumerical@1.0.4: - dependencies: - is-alphabetical: 1.0.4 - is-decimal: 1.0.4 - - is-array-buffer@3.0.4: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - - is-bigint@1.0.4: - dependencies: - has-bigints: 1.0.2 - - is-boolean-object@1.1.2: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - - is-buffer@2.0.5: {} - - is-callable@1.2.7: {} - - is-core-module@2.15.0: - dependencies: - hasown: 2.0.2 - - is-data-view@1.0.1: - dependencies: - is-typed-array: 1.1.13 - - is-date-object@1.0.5: - dependencies: - has-tostringtag: 1.0.2 - - is-decimal@1.0.4: {} - - is-extglob@2.1.1: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-hexadecimal@1.0.4: {} - - is-negative-zero@2.0.3: {} - - is-number-object@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - - is-number@7.0.0: {} - - is-path-inside@3.0.3: {} - - is-plain-obj@2.1.0: {} - - is-regex@1.1.4: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - - is-shared-array-buffer@1.0.3: - dependencies: - call-bind: 1.0.7 - - is-string@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - - is-symbol@1.0.4: - dependencies: - has-symbols: 1.0.3 - - is-typed-array@1.1.13: - dependencies: - which-typed-array: 1.1.15 - - is-weakref@1.0.2: - dependencies: - call-bind: 1.0.7 - - isarray@2.0.5: {} - - isexe@2.0.0: {} - - js-tokens@4.0.0: {} - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - jsdoc-type-pratt-parser@4.0.0: {} - - jsesc@2.5.2: {} - - json-schema-traverse@0.4.1: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - - json5@1.0.2: - dependencies: - minimist: 1.2.8 - - json5@2.2.3: {} - - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - lodash.merge@4.6.2: {} - - longest-streak@2.0.4: {} - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - markdown-table@2.0.0: - dependencies: - repeat-string: 1.6.1 - - mdast-util-find-and-replace@1.1.1: - dependencies: - escape-string-regexp: 4.0.0 - unist-util-is: 4.1.0 - unist-util-visit-parents: 3.1.1 - - mdast-util-footnote@0.1.7: - dependencies: - mdast-util-to-markdown: 0.6.5 - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - mdast-util-from-markdown@0.8.5: - dependencies: - '@types/mdast': 3.0.15 - mdast-util-to-string: 2.0.0 - micromark: 2.11.4 - parse-entities: 2.0.0 - unist-util-stringify-position: 2.0.3 - transitivePeerDependencies: - - supports-color - - mdast-util-frontmatter@0.2.0: - dependencies: - micromark-extension-frontmatter: 0.2.2 - - mdast-util-gfm-autolink-literal@0.1.3: - dependencies: - ccount: 1.1.0 - mdast-util-find-and-replace: 1.1.1 - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-strikethrough@0.2.3: - dependencies: - mdast-util-to-markdown: 0.6.5 - - mdast-util-gfm-table@0.1.6: - dependencies: - markdown-table: 2.0.0 - mdast-util-to-markdown: 0.6.5 - - mdast-util-gfm-task-list-item@0.1.6: - dependencies: - mdast-util-to-markdown: 0.6.5 - - mdast-util-gfm@0.1.2: - dependencies: - mdast-util-gfm-autolink-literal: 0.1.3 - mdast-util-gfm-strikethrough: 0.2.3 - mdast-util-gfm-table: 0.1.6 - mdast-util-gfm-task-list-item: 0.1.6 - mdast-util-to-markdown: 0.6.5 - transitivePeerDependencies: - - supports-color - - mdast-util-to-markdown@0.6.5: - dependencies: - '@types/unist': 2.0.10 - longest-streak: 2.0.4 - mdast-util-to-string: 2.0.0 - parse-entities: 2.0.0 - repeat-string: 1.6.1 - zwitch: 1.0.5 - - mdast-util-to-string@2.0.0: {} - - merge2@1.4.1: {} - - micromark-extension-footnote@0.3.2: - dependencies: - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - micromark-extension-frontmatter@0.2.2: - dependencies: - fault: 1.0.4 - - micromark-extension-gfm-autolink-literal@0.5.7: - dependencies: - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - micromark-extension-gfm-strikethrough@0.6.5: - dependencies: - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - micromark-extension-gfm-table@0.4.3: - dependencies: - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - micromark-extension-gfm-tagfilter@0.3.0: {} - - micromark-extension-gfm-task-list-item@0.3.3: - dependencies: - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - micromark-extension-gfm@0.3.3: - dependencies: - micromark: 2.11.4 - micromark-extension-gfm-autolink-literal: 0.5.7 - micromark-extension-gfm-strikethrough: 0.6.5 - micromark-extension-gfm-table: 0.4.3 - micromark-extension-gfm-tagfilter: 0.3.0 - micromark-extension-gfm-task-list-item: 0.3.3 - transitivePeerDependencies: - - supports-color - - micromark@2.11.4: - dependencies: - debug: 4.3.5 - parse-entities: 2.0.0 - transitivePeerDependencies: - - supports-color - - micromatch@4.0.5: - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - - minimatch@9.0.3: - dependencies: - brace-expansion: 2.0.1 - - minimist@1.2.8: {} - - ms@2.1.2: {} - - natural-compare@1.4.0: {} - - node-releases@2.0.18: {} - - object-inspect@1.13.2: {} - - object-keys@1.1.1: {} - - object.assign@4.1.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - - object.groupby@1.0.3: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - - object.values@1.2.0: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - optionator@0.9.3: - dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parse-entities@2.0.0: - dependencies: - character-entities: 1.2.4 - character-entities-legacy: 1.1.4 - character-reference-invalid: 1.1.4 - is-alphanumerical: 1.0.4 - is-decimal: 1.0.4 - is-hexadecimal: 1.0.4 - - parse-imports@2.1.1: - dependencies: - es-module-lexer: 1.5.4 - slashes: 3.0.12 - - path-exists@4.0.0: {} - - path-is-absolute@1.0.1: {} - - path-key@3.1.1: {} - - path-parse@1.0.7: {} - - path-type@4.0.0: {} - - picocolors@1.0.1: {} - - picomatch@2.3.1: {} - - possible-typed-array-names@1.0.0: {} - - prelude-ls@1.2.1: {} - - prettier-linter-helpers@1.0.0: - dependencies: - fast-diff: 1.3.0 - - prettier@2.8.8: {} - - punycode@2.3.1: {} - - queue-microtask@1.2.3: {} - - regexp.prototype.flags@1.5.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 - - regexpp@3.2.0: {} - - remark-footnotes@3.0.0: - dependencies: - mdast-util-footnote: 0.1.7 - micromark-extension-footnote: 0.3.2 - transitivePeerDependencies: - - supports-color - - remark-frontmatter@3.0.0: - dependencies: - mdast-util-frontmatter: 0.2.0 - micromark-extension-frontmatter: 0.2.2 - - remark-gfm@1.0.0: - dependencies: - mdast-util-gfm: 0.1.2 - micromark-extension-gfm: 0.3.3 - transitivePeerDependencies: - - supports-color - - remark-parse@9.0.0: - dependencies: - mdast-util-from-markdown: 0.8.5 - transitivePeerDependencies: - - supports-color - - repeat-string@1.6.1: {} - - resolve-from@4.0.0: {} - - resolve-pkg-maps@1.0.0: {} - - resolve@1.22.8: - dependencies: - is-core-module: 2.15.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - reusify@1.0.4: {} - - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - safe-array-concat@1.1.2: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - isarray: 2.0.5 - - safe-regex-test@1.0.3: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-regex: 1.1.4 - - semver@6.3.1: {} - - semver@7.6.3: {} - - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - side-channel@1.0.6: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.2 - - slash@3.0.0: {} - - slashes@3.0.12: {} - - spdx-exceptions@2.5.0: {} - - spdx-expression-parse@4.0.0: - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.18 - - spdx-license-ids@3.0.18: {} - - string.prototype.trim@1.2.9: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - - string.prototype.trimend@1.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-bom@3.0.0: {} - - strip-json-comments@3.1.1: {} - - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - synckit@0.9.1: - dependencies: - '@pkgr/core': 0.1.1 - tslib: 2.6.3 - - text-table@0.2.0: {} - - to-fast-properties@2.0.0: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - traverse@0.6.9: - dependencies: - gopd: 1.0.1 - typedarray.prototype.slice: 1.0.3 - which-typed-array: 1.1.15 - - trough@1.0.5: {} - - ts-api-utils@1.0.1(typescript@5.5.4): - dependencies: - typescript: 5.5.4 - - tsconfig-paths@3.15.0: - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - - tslib@2.6.3: {} - - tsx@4.16.2: - dependencies: - esbuild: 0.21.5 - get-tsconfig: 4.7.5 - optionalDependencies: - fsevents: 2.3.3 - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - type-fest@0.20.2: {} - - typed-array-buffer@1.0.2: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-typed-array: 1.1.13 - - typed-array-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - - typed-array-byte-offset@1.0.2: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - - typed-array-length@1.0.6: - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 - - typedarray.prototype.slice@1.0.3: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - typed-array-buffer: 1.0.2 - typed-array-byte-offset: 1.0.2 - - typescript@5.5.4: {} - - unbox-primitive@1.0.2: - dependencies: - call-bind: 1.0.7 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - - underscore@1.13.7: {} - - undici-types@5.26.5: {} - - unified@9.2.2: - dependencies: - '@types/unist': 2.0.10 - bail: 1.0.5 - extend: 3.0.2 - is-buffer: 2.0.5 - is-plain-obj: 2.1.0 - trough: 1.0.5 - vfile: 4.2.1 - - unist-util-is@4.1.0: {} - - unist-util-stringify-position@2.0.3: - dependencies: - '@types/unist': 2.0.10 - - unist-util-visit-parents@3.1.1: - dependencies: - '@types/unist': 2.0.10 - unist-util-is: 4.1.0 - - update-browserslist-db@1.1.0(browserslist@4.23.2): - dependencies: - browserslist: 4.23.2 - escalade: 3.1.2 - picocolors: 1.0.1 - - update-section@0.3.3: {} - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - vfile-message@2.0.4: - dependencies: - '@types/unist': 2.0.10 - unist-util-stringify-position: 2.0.3 - - vfile@4.2.1: - dependencies: - '@types/unist': 2.0.10 - is-buffer: 2.0.5 - unist-util-stringify-position: 2.0.3 - vfile-message: 2.0.4 - - which-boxed-primitive@1.0.2: - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - - which-typed-array@1.1.15: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - wrappy@1.0.2: {} - - yallist@3.1.1: {} - - yocto-queue@0.1.0: {} - - zwitch@1.0.5: {} diff --git a/packages/contracts-bedrock/scripts/checks/check-snapshots.sh b/packages/contracts-bedrock/scripts/checks/check-snapshots.sh index cc1ffabd36..dca296ee83 100755 --- a/packages/contracts-bedrock/scripts/checks/check-snapshots.sh +++ b/packages/contracts-bedrock/scripts/checks/check-snapshots.sh @@ -3,7 +3,7 @@ set -euo pipefail # Generate the snapshots -pnpm snapshots +just snapshots # Check if the generated `snapshots` or `test/kontrol` files are different from the committed versions if git diff --exit-code snapshots test/kontrol > /dev/null; then diff --git a/packages/contracts-bedrock/scripts/getting-started/versions.sh b/packages/contracts-bedrock/scripts/getting-started/versions.sh index 18c0ca3228..5ff2369dae 100755 --- a/packages/contracts-bedrock/scripts/getting-started/versions.sh +++ b/packages/contracts-bedrock/scripts/getting-started/versions.sh @@ -37,6 +37,7 @@ ver_foundry=$(versionFoundry "$(forge --version)") ver_make=$(version "$(make --version)") ver_jq=$(version "$(jq --version)") ver_direnv=$(version "$(direnv --version)") +ver_just=$(version "$(just --version)") # Print versions echo "Dependency | Minimum | Actual" @@ -48,3 +49,4 @@ echo "foundry 0.2.0 (a5efe4f) $ver_foundry" echo "make 3 $ver_make" echo "jq 1.6 $ver_jq" echo "direnv 2 $ver_direnv" +echo "just 1.34.0 $ver_just" diff --git a/packages/contracts-bedrock/test/libraries/SafeCall.t.sol b/packages/contracts-bedrock/test/libraries/SafeCall.t.sol index fcb9d3832a..5bd3fb3a4a 100644 --- a/packages/contracts-bedrock/test/libraries/SafeCall.t.sol +++ b/packages/contracts-bedrock/test/libraries/SafeCall.t.sol @@ -13,6 +13,8 @@ contract SafeCall_Test is Test { function assumeNot(address _addr) internal { vm.assume(_addr.balance == 0); vm.assume(_addr != address(this)); + vm.assume(uint256(uint160(_addr)) > uint256(256)); // TODO temp fix until new forge-std release with modern + // precompiles: https://github.com/foundry-rs/forge-std/pull/594 assumeAddressIsNot(_addr, StdCheatsSafe.AddressType.ForgeAddress, StdCheatsSafe.AddressType.Precompile); } diff --git a/packages/contracts-bedrock/tsconfig.json b/packages/contracts-bedrock/tsconfig.json deleted file mode 100644 index 7c7a627087..0000000000 --- a/packages/contracts-bedrock/tsconfig.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "compilerOptions": { - "outDir": "./dist", - "skipLibCheck": true, - "module": "commonjs", - "target": "es2017", - "sourceMap": true, - "esModuleInterop": true, - "composite": true, - "resolveJsonModule": true, - "declaration": true, - "noImplicitAny": false, - "removeComments": true, - "noLib": false, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "typeRoots": [ - "node_modules/@types" - ] - }, - "exclude": [ - "node_modules", - "dist" - ], - "include": [ - "deploy-config/**/*", - "deploy-config/**/*.json", - "scripts/**/*" - ] -} diff --git a/versions.json b/versions.json index 57327d6215..0850a4d507 100644 --- a/versions.json +++ b/versions.json @@ -5,5 +5,6 @@ "eth2_testnet_genesis": "v0.10.0", "nvm": "v20.9.0", "slither": "0.10.2", - "kontrol": "0.1.316" + "kontrol": "0.1.316", + "just": "1.34.0" } From cc67d34e24b774eb6271d12d156e6de7c38c505e Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Thu, 8 Aug 2024 06:30:14 +1000 Subject: [PATCH 07/29] op-proposer, op-batcher: Wait for sync in Start rather than loop. (#11192) Ensures that if it fails, the process exits with an error, rather than just exiting the runloop and continuing on in a zombie mode that doesn't do anything but doesn't exit. --- op-batcher/batcher/driver.go | 14 +++++++------- op-proposer/proposer/driver.go | 15 +++++++-------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/op-batcher/batcher/driver.go b/op-batcher/batcher/driver.go index 0b5286abb3..55a8f04ecf 100644 --- a/op-batcher/batcher/driver.go +++ b/op-batcher/batcher/driver.go @@ -114,6 +114,13 @@ func (l *BatchSubmitter) StartBatchSubmitting() error { l.clearState(l.shutdownCtx) l.lastStoredBlock = eth.BlockID{} + if l.Config.WaitNodeSync { + err := l.waitNodeSync() + if err != nil { + return fmt.Errorf("error waiting for node sync: %w", err) + } + } + l.wg.Add(1) go l.loop() @@ -289,13 +296,6 @@ const ( func (l *BatchSubmitter) loop() { defer l.wg.Done() - if l.Config.WaitNodeSync { - err := l.waitNodeSync() - if err != nil { - l.Log.Error("Error waiting for node sync", "err", err) - return - } - } receiptsCh := make(chan txmgr.TxReceipt[txRef]) queue := txmgr.NewQueue[txRef](l.killCtx, l.Txmgr, l.Config.MaxPendingTransactions) diff --git a/op-proposer/proposer/driver.go b/op-proposer/proposer/driver.go index 7f8caac53f..171595946b 100644 --- a/op-proposer/proposer/driver.go +++ b/op-proposer/proposer/driver.go @@ -178,6 +178,13 @@ func (l *L2OutputSubmitter) StartL2OutputSubmitting() error { } l.running = true + if l.Cfg.WaitNodeSync { + err := l.waitNodeSync() + if err != nil { + return fmt.Errorf("error waiting for node sync: %w", err) + } + } + l.wg.Add(1) go l.loop() @@ -429,14 +436,6 @@ func (l *L2OutputSubmitter) loop() { defer l.wg.Done() ctx := l.ctx - if l.Cfg.WaitNodeSync { - err := l.waitNodeSync() - if err != nil { - l.Log.Error("Error waiting for node sync", "err", err) - return - } - } - if l.dgfContract == nil { l.loopL2OO(ctx) } else { From 051db548a7f968b8c1b88da7135d0bf9cbea4954 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 8 Aug 2024 00:33:43 +0300 Subject: [PATCH 08/29] contracts-bedrock: improve `CrossL2Inbox` devex (#11322) * contracts-bedrock: improve `CrossL2Inbox` devex Improve the `CrossL2Inbox` devex by creating an alternative entrypoint. This design was not considered previously because there was a "top level call" restriction, aka the "only EOA" invariant. This was to allow for static analysis of transactions, keeping resource usage lower for validating transactions when building blocks or at the mempool layer. Since 3074/7702 render the enforcement of only eoa impossible, we decided to op/acc and lean into the approach of allowing subcalls to trigger `ExecutingMessage` events. This new interface allows another contract to be the entrypoint, the idea is that the user sends the `Identifier` and the serialized log (message) to whatever contract that they want and then pass it to `CrossL2Inbox.validateMessage` which then emits the event that consensus validates. This allows the calling smart contract to be aware of the schema for the log and deserialize it however they see fit. Since the serialized logs are done with the following algorithm: ```go msg := make([]byte, 0) for _, topic := range log.Topics { msg = append(msg, topic.Bytes()...) } msg = append(msg, log.Data...) ``` It is very easy to use `abi.decode` to decode a log, given that solidity was used to `emit` it. The topics are `bytes32` and then the data is abi encoded given the schema of the event itself. Unused parts like `topic[0]` (hash of the event name) can be dropped when decoding if they are not required. * ctb: fix typo * remove nonReentrant and add tests for validateMessage, rename ENTERED_SLOT preimage * add natspec for _checkIdentifier and update that of validateMessage * update version and semver-lock file * check all topics in crossl2inbox test, run pnpm snapshots * tests: fix --------- Co-authored-by: Michael Amadi --- packages/contracts-bedrock/semver-lock.json | 8 +-- .../snapshots/abi/CrossL2Inbox.json | 50 +++++++++++++++ .../abi/TransientReentrancyAware.json | 13 +++- .../contracts-bedrock/src/L2/CrossL2Inbox.sol | 41 +++++++++---- .../src/L2/L2ToL2CrossDomainMessenger.sol | 36 +---------- .../src/libraries/TransientContext.sol | 45 ++++++++++++++ .../test/L2/CrossL2Inbox.t.sol | 61 +++++++++++++++++++ 7 files changed, 202 insertions(+), 52 deletions(-) diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index dc1f1cc9c4..3980893a86 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -68,8 +68,8 @@ "sourceCodeHash": "0x3a725791a0f5ed84dc46dcdae26f6170a759b2fe3dc360d704356d088b76cfd6" }, "src/L2/CrossL2Inbox.sol": { - "initCodeHash": "0x318b1e98f1686920e3d309390983454685aa84ed997598ead1b4c1a1938206c4", - "sourceCodeHash": "0xb0d2d5944f11bdf44cb6a16a9b00ab76a9b9f5ab2abb081781fb1c27927eb5ab" + "initCodeHash": "0x80124454d2127d5ff340b0ef048be6d5bf5984e84c75021b6a1ffa81703a2503", + "sourceCodeHash": "0xfb26fc80fbc7febdc91ac73ea91ceb479b238e0e81804a0a21192d78c261a755" }, "src/L2/ETHLiquidity.sol": { "initCodeHash": "0x98177562fca0de0dfea5313c9acefe2fdbd73dee5ce6c1232055601f208f0177", @@ -108,8 +108,8 @@ "sourceCodeHash": "0x8388b9b8075f31d580fed815b66b45394e40fb1a63cd8cda2272d2c390fc908c" }, "src/L2/L2ToL2CrossDomainMessenger.sol": { - "initCodeHash": "0xda499b71aec14976b8e133fad9ece083805f5ff520f0e88f89232fd837451954", - "sourceCodeHash": "0x7a9cddf5b54ac72457231f0c09b8e88398202ac29125cd63318b8389c81e119b" + "initCodeHash": "0xe390be1390edc38fd879d7620538560076d7fcf3ef9debce327a1877d96d3ff0", + "sourceCodeHash": "0x20f77dc5a02869c6885b73347fa9e7d2bbc4eaf8a2313f7e7435e456001f7a75" }, "src/L2/SequencerFeeVault.sol": { "initCodeHash": "0xb94145f571e92ee615c6fe903b6568e8aac5fe760b6b65148ffc45d2fb0f5433", diff --git a/packages/contracts-bedrock/snapshots/abi/CrossL2Inbox.json b/packages/contracts-bedrock/snapshots/abi/CrossL2Inbox.json index fab918cc88..db1a70423c 100644 --- a/packages/contracts-bedrock/snapshots/abi/CrossL2Inbox.json +++ b/packages/contracts-bedrock/snapshots/abi/CrossL2Inbox.json @@ -114,6 +114,51 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "origin", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "logIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + } + ], + "internalType": "struct ICrossL2Inbox.Identifier", + "name": "_id", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "_msgHash", + "type": "bytes32" + } + ], + "name": "validateMessage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "version", @@ -188,6 +233,11 @@ "name": "NotEntered", "type": "error" }, + { + "inputs": [], + "name": "ReentrantCall", + "type": "error" + }, { "inputs": [], "name": "TargetCallFailed", diff --git a/packages/contracts-bedrock/snapshots/abi/TransientReentrancyAware.json b/packages/contracts-bedrock/snapshots/abi/TransientReentrancyAware.json index 0637a088a0..02e2e52686 100644 --- a/packages/contracts-bedrock/snapshots/abi/TransientReentrancyAware.json +++ b/packages/contracts-bedrock/snapshots/abi/TransientReentrancyAware.json @@ -1 +1,12 @@ -[] \ No newline at end of file +[ + { + "inputs": [], + "name": "NotEntered", + "type": "error" + }, + { + "inputs": [], + "name": "ReentrantCall", + "type": "error" + } +] \ No newline at end of file diff --git a/packages/contracts-bedrock/src/L2/CrossL2Inbox.sol b/packages/contracts-bedrock/src/L2/CrossL2Inbox.sol index 970cb80d97..9c464df590 100644 --- a/packages/contracts-bedrock/src/L2/CrossL2Inbox.sol +++ b/packages/contracts-bedrock/src/L2/CrossL2Inbox.sol @@ -56,21 +56,14 @@ contract CrossL2Inbox is ICrossL2Inbox, ISemver, TransientReentrancyAware { bytes32 internal constant CHAINID_SLOT = 0x6e0446e8b5098b8c8193f964f1b567ec3a2bdaeba33d36acb85c1f1d3f92d313; /// @notice Semantic version. - /// @custom:semver 1.0.0-beta.3 - string public constant version = "1.0.0-beta.3"; + /// @custom:semver 1.0.0-beta.4 + string public constant version = "1.0.0-beta.4"; /// @notice Emitted when a cross chain message is being executed. /// @param msgHash Hash of message payload being executed. /// @param id Encoded Identifier of the message. event ExecutingMessage(bytes32 indexed msgHash, Identifier id); - /// @notice Enforces that cross domain message sender and source are set. Reverts if not. - /// Used to differentiate between 0 and nil in transient storage. - modifier notEntered() { - if (TransientContext.callDepth() == 0) revert NotEntered(); - _; - } - /// @notice Returns the origin address of the Identifier. If not entered, reverts. /// @return Origin address of the Identifier. function origin() external view notEntered returns (address) { @@ -114,10 +107,8 @@ contract CrossL2Inbox is ICrossL2Inbox, ISemver, TransientReentrancyAware { payable reentrantAware { - if (_id.timestamp > block.timestamp) revert InvalidTimestamp(); - if (!IDependencySet(Predeploys.L1_BLOCK_ATTRIBUTES).isInDependencySet(_id.chainId)) { - revert InvalidChainId(); - } + // Check the Identifier. + _checkIdentifier(_id); // Store the Identifier in transient storage. _storeIdentifier(_id); @@ -131,6 +122,30 @@ contract CrossL2Inbox is ICrossL2Inbox, ISemver, TransientReentrancyAware { emit ExecutingMessage(keccak256(_message), _id); } + /// @notice Validates a cross chain message on the destination chain + /// and emits an ExecutingMessage event. This function is useful + /// for applications that understand the schema of the _message payload and want to + /// process it in a custom way. + /// @param _id Identifier of the message. + /// @param _msgHash Hash of the message payload to call target with. + function validateMessage(Identifier calldata _id, bytes32 _msgHash) external { + // Check the Identifier. + _checkIdentifier(_id); + + emit ExecutingMessage(_msgHash, _id); + } + + /// @notice Validates that for a given cross chain message identifier, + /// it's timestamp is not in the future and the source chainId + /// is in the destination chain's dependency set. + /// @param _id Identifier of the message. + function _checkIdentifier(Identifier calldata _id) internal view { + if (_id.timestamp > block.timestamp) revert InvalidTimestamp(); + if (!IDependencySet(Predeploys.L1_BLOCK_ATTRIBUTES).isInDependencySet(_id.chainId)) { + revert InvalidChainId(); + } + } + /// @notice Stores the Identifier in transient storage. /// @param _id Identifier to store. function _storeIdentifier(Identifier calldata _id) internal { diff --git a/packages/contracts-bedrock/src/L2/L2ToL2CrossDomainMessenger.sol b/packages/contracts-bedrock/src/L2/L2ToL2CrossDomainMessenger.sol index cafcf0d0cc..6415b3cc06 100644 --- a/packages/contracts-bedrock/src/L2/L2ToL2CrossDomainMessenger.sol +++ b/packages/contracts-bedrock/src/L2/L2ToL2CrossDomainMessenger.sol @@ -7,6 +7,7 @@ import { CrossL2Inbox } from "src/L2/CrossL2Inbox.sol"; import { IL2ToL2CrossDomainMessenger } from "src/L2/IL2ToL2CrossDomainMessenger.sol"; import { ISemver } from "src/universal/ISemver.sol"; import { SafeCall } from "src/libraries/SafeCall.sol"; +import { TransientReentrancyAware } from "src/libraries/TransientContext.sol"; /// @notice Thrown when a non-written slot in transient storage is attempted to be read from. error NotEntered(); @@ -41,11 +42,7 @@ error ReentrantCall(); /// @notice The L2ToL2CrossDomainMessenger is a higher level abstraction on top of the CrossL2Inbox that provides /// features necessary for secure transfers ERC20 tokens between L2 chains. Messages sent through the /// L2ToL2CrossDomainMessenger on the source chain receive both replay protection as well as domain binding. -contract L2ToL2CrossDomainMessenger is IL2ToL2CrossDomainMessenger, ISemver { - /// @notice Storage slot for `entered` value. - /// Equal to bytes32(uint256(keccak256("l2tol2crossdomainmessenger.entered")) - 1) - bytes32 internal constant ENTERED_SLOT = 0xf53fc38c5e461bdcbbeb47887fecf014abd399293109cd50f65e5f9078cfd025; - +contract L2ToL2CrossDomainMessenger is IL2ToL2CrossDomainMessenger, ISemver, TransientReentrancyAware { /// @notice Storage slot for the sender of the current cross domain message. /// Equal to bytes32(uint256(keccak256("l2tol2crossdomainmessenger.sender")) - 1) bytes32 internal constant CROSS_DOMAIN_MESSAGE_SENDER_SLOT = @@ -80,25 +77,6 @@ contract L2ToL2CrossDomainMessenger is IL2ToL2CrossDomainMessenger, ISemver { /// @param messageHash Hash of the message that failed to be relayed. event FailedRelayedMessage(bytes32 indexed messageHash); - /// @notice Enforces that a function cannot be re-entered. - modifier nonReentrant() { - if (_entered()) revert ReentrantCall(); - assembly { - tstore(ENTERED_SLOT, 1) - } - _; - assembly { - tstore(ENTERED_SLOT, 0) - } - } - - /// @notice Enforces that cross domain message sender and source are set. Reverts if not. - /// Used to differentiate between 0 and nil in transient storage. - modifier onlyEntered() { - if (!_entered()) revert NotEntered(); - _; - } - /// @notice Retrieves the sender of the current cross domain message. If not entered, reverts. /// @return _sender Address of the sender of the current cross domain message. function crossDomainMessageSender() external view onlyEntered returns (address _sender) { @@ -193,16 +171,6 @@ contract L2ToL2CrossDomainMessenger is IL2ToL2CrossDomainMessenger, ISemver { return Encoding.encodeVersionedNonce(msgNonce, messageVersion); } - /// @notice Retrieves whether the contract is currently entered or not. - /// @return True if the contract is entered, and false otherwise. - function _entered() internal view returns (bool) { - uint256 value; - assembly { - value := tload(ENTERED_SLOT) - } - return value != 0; - } - /// @notice Stores message data such as sender and source in transient storage. /// @param _source Chain ID of the source chain. /// @param _sender Address of the sender of the message. diff --git a/packages/contracts-bedrock/src/libraries/TransientContext.sol b/packages/contracts-bedrock/src/libraries/TransientContext.sol index 4dfb92070d..afc852787c 100644 --- a/packages/contracts-bedrock/src/libraries/TransientContext.sol +++ b/packages/contracts-bedrock/src/libraries/TransientContext.sol @@ -61,10 +61,55 @@ library TransientContext { /// @notice Reentrancy-aware modifier for transient storage, which increments and /// decrements the call depth when entering and exiting a function. contract TransientReentrancyAware { + /// @notice Thrown when a non-written transient storage slot is attempted to be read from. + error NotEntered(); + + /// @notice Thrown when a reentrant call is detected. + error ReentrantCall(); + + /// @notice Storage slot for `entered` value. + /// Equal to bytes32(uint256(keccak256("transientreentrancyaware.entered")) - 1) + bytes32 internal constant ENTERED_SLOT = 0xf13569814868ede994184d5a425471fb19e869768a33421cb701a2ba3d420c0a; + /// @notice Modifier to make a function reentrancy-aware. modifier reentrantAware() { TransientContext.increment(); _; TransientContext.decrement(); } + + /// @notice Enforces that a function cannot be re-entered. + modifier nonReentrant() { + if (_entered()) revert ReentrantCall(); + assembly { + tstore(ENTERED_SLOT, 1) + } + _; + assembly { + tstore(ENTERED_SLOT, 0) + } + } + + /// @notice Enforces that cross domain message sender and source are set. Reverts if not. + /// Used to differentiate between 0 and nil in transient storage. + modifier notEntered() { + if (TransientContext.callDepth() == 0) revert NotEntered(); + _; + } + + /// @notice Enforces that cross domain message sender and source are set. Reverts if not. + /// Used to differentiate between 0 and nil in transient storage. + modifier onlyEntered() { + if (!_entered()) revert NotEntered(); + _; + } + + /// @notice Retrieves whether the contract is currently entered or not. + /// @return entered_ True if the contract is entered, and false otherwise. + function _entered() internal view returns (bool entered_) { + assembly { + let value := tload(ENTERED_SLOT) + entered_ := gt(value, 0) + } + } } diff --git a/packages/contracts-bedrock/test/L2/CrossL2Inbox.t.sol b/packages/contracts-bedrock/test/L2/CrossL2Inbox.t.sol index 9350e6b2fb..c126b596eb 100644 --- a/packages/contracts-bedrock/test/L2/CrossL2Inbox.t.sol +++ b/packages/contracts-bedrock/test/L2/CrossL2Inbox.t.sol @@ -271,6 +271,67 @@ contract CrossL2InboxTest is Test { crossL2Inbox.executeMessage{ value: _value }({ _id: _id, _target: _target, _message: _message }); } + function testFuzz_validateMessage_succeeds(ICrossL2Inbox.Identifier memory _id, bytes32 _messageHash) external { + // Ensure that the id's timestamp is valid (less than or equal to the current block timestamp) + _id.timestamp = bound(_id.timestamp, 1, block.timestamp); + + // Ensure that the chain ID is in the dependency set + vm.mockCall({ + callee: Predeploys.L1_BLOCK_ATTRIBUTES, + data: abi.encodeWithSelector(L1BlockIsInDependencySetSelector, _id.chainId), + returnData: abi.encode(true) + }); + + // Look for the emit ExecutingMessage event + vm.expectEmit(Predeploys.CROSS_L2_INBOX); + emit CrossL2Inbox.ExecutingMessage(_messageHash, _id); + + // Call the validateMessage function + crossL2Inbox.validateMessage(_id, _messageHash); + } + + /// @dev Tests that the `validateMessage` function reverts when called with an identifier with an invalid timestamp. + function testFuzz_validateMessage_invalidTimestamp_reverts( + ICrossL2Inbox.Identifier calldata _id, + bytes32 _messageHash + ) + external + { + // Ensure that the id's timestamp is invalid (greater thsan the current block timestamp) + vm.assume(_id.timestamp > block.timestamp); + + // Expect a revert with the InvalidTimestamp selector + vm.expectRevert(InvalidTimestamp.selector); + + // Call the validateMessage function + crossL2Inbox.validateMessage(_id, _messageHash); + } + + /// @dev Tests that the `validateMessage` function reverts when called with an identifier with a chain ID not in the + /// dependency set. + function testFuzz_validateMessage_invalidChainId_reverts( + ICrossL2Inbox.Identifier memory _id, + bytes32 _messageHash + ) + external + { + // Ensure that the timestamp is valid (less than or equal to the current block timestamp) + _id.timestamp = bound(_id.timestamp, 0, block.timestamp); + + // Ensure that the chain ID is NOT in the dependency set. + vm.mockCall({ + callee: Predeploys.L1_BLOCK_ATTRIBUTES, + data: abi.encodeWithSelector(L1BlockIsInDependencySetSelector, _id.chainId), + returnData: abi.encode(false) + }); + + // Expect a revert with the InvalidChainId selector + vm.expectRevert(InvalidChainId.selector); + + // Call the validateMessage function + crossL2Inbox.validateMessage(_id, _messageHash); + } + /// @dev Tests that the `origin` function returns the correct value. function testFuzz_origin_succeeds(address _origin) external { // Increment the call depth to prevent NotEntered revert From b047e1fd3b16d76c820d6e8cfc3cac4ede09d847 Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Thu, 8 Aug 2024 09:08:11 +1000 Subject: [PATCH 09/29] Revert "Fix devnet-up when op-program/bin is missing prestate-proof.json (#11383)" (#11393) This reverts commit 2491a3732fe97c9eec9baf615a010e8f7a42f738. make cannon-prestate doesn't declare all transitive dependencies properly so can fail to build when there are changes. --- Makefile | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index 2f9620ee92..51d0d1397b 100644 --- a/Makefile +++ b/Makefile @@ -137,18 +137,11 @@ reproducible-prestate: ## Builds reproducible-prestate binary make -C ./op-program reproducible-prestate .PHONY: reproducible-prestate -# Checks if prestate outputs are missing -cannon-prestate: op-program/bin/prestate-proof.json -.PHONY: cannon-prestate - -op-program/bin/prestate-proof.json: - make generate-cannon-prestates - -generate-cannon-prestates: op-program cannon ## Generates prestate using cannon and op-program +cannon-prestate: op-program cannon ## Generates prestate using cannon and op-program ./cannon/bin/cannon load-elf --path op-program/bin/op-program-client.elf --out op-program/bin/prestate.json --meta op-program/bin/meta.json ./cannon/bin/cannon run --proof-at '=0' --stop-at '=1' --input op-program/bin/prestate.json --meta op-program/bin/meta.json --proof-fmt 'op-program/bin/%d.json' --output "" mv op-program/bin/0.json op-program/bin/prestate-proof.json -.PHONY: generate-cannon-prestates +.PHONY: cannon-prestate mod-tidy: ## Cleans up unused dependencies in Go modules # Below GOPRIVATE line allows mod-tidy to be run immediately after @@ -167,14 +160,16 @@ nuke: clean devnet-clean ## Completely clean the project directory git clean -Xdf .PHONY: nuke -## Prepares for running a local devnet -pre-devnet: submodules cannon-prestate +pre-devnet: submodules ## Prepares for running a local devnet @if ! [ -x "$(command -v geth)" ]; then \ make install-geth; \ fi @if ! [ -x "$(command -v eth2-testnet-genesis)" ]; then \ make install-eth2-testnet-genesis; \ fi + @if [ ! -e op-program/bin ]; then \ + make cannon-prestate; \ + fi .PHONY: pre-devnet devnet-up: pre-devnet ## Starts the local devnet From 2f295d035e96aa1391335132a7936e468ef0c920 Mon Sep 17 00:00:00 2001 From: protolambda Date: Wed, 7 Aug 2024 22:02:22 -0600 Subject: [PATCH 10/29] devnet/e2e: run L1 Deneb and L2 Fjord by default (#11359) * devnet/e2e: run L1 Deneb and L2 Fjord by default * op-e2e: fix TestPostUnsafePayload * op-e2e: Fix TestGasPriceOracleFeeUpdates * op-e2e/actions: fix some tests The L2EngineAPI test needs more fixing * tests: fixes to support Ecotone/Fjord in more tests * op-e2e: one more fix --------- Co-authored-by: Sebastian Stammler --- op-e2e/actions/dencun_fork_test.go | 34 ++------ op-e2e/actions/ecotone_fork_test.go | 10 +-- op-e2e/actions/l2_engine_test.go | 56 ++++++++---- op-e2e/actions/span_batch_test.go | 5 ++ op-e2e/actions/system_config_test.go | 8 ++ op-e2e/system_adminrpc_test.go | 10 +-- op-e2e/system_tob_test.go | 69 +++++++-------- .../l2/engineapi/test/l2_engine_api_tests.go | 85 ++++++++++++------- ops-bedrock/beacon-data/config.yaml | 3 +- ops-bedrock/l1-generate-beacon-genesis.sh | 2 +- .../deploy-config/devnetL1-template.json | 5 +- 11 files changed, 155 insertions(+), 132 deletions(-) diff --git a/op-e2e/actions/dencun_fork_test.go b/op-e2e/actions/dencun_fork_test.go index 5e0f1706cb..9b411e28f1 100644 --- a/op-e2e/actions/dencun_fork_test.go +++ b/op-e2e/actions/dencun_fork_test.go @@ -62,8 +62,7 @@ func TestDencunL1ForkAfterGenesis(gt *testing.T) { func TestDencunL1ForkAtGenesis(gt *testing.T) { t := NewDefaultTesting(gt) dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) - offset := hexutil.Uint64(0) - dp.DeployConfig.L1CancunTimeOffset = &offset + require.Zero(t, *dp.DeployConfig.L1CancunTimeOffset) sd := e2eutils.Setup(t, dp, defaultAlloc) log := testlog.Logger(t, log.LevelDebug) _, _, miner, sequencer, _, verifier, _, batcher := setupReorgTestActors(t, dp, sd, log) @@ -120,14 +119,13 @@ func verifyEcotoneBlock(gt *testing.T, header *types.Header) { func TestDencunL2ForkAfterGenesis(gt *testing.T) { t := NewDefaultTesting(gt) dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) - - cancunOffset := hexutil.Uint64(0) - dp.DeployConfig.L1CancunTimeOffset = &cancunOffset + require.Zero(t, *dp.DeployConfig.L1CancunTimeOffset) // This test wil fork on the second block offset := hexutil.Uint64(dp.DeployConfig.L2BlockTime * 2) - dp.DeployConfig.L2GenesisCanyonTimeOffset = &offset - dp.DeployConfig.L2GenesisDeltaTimeOffset = &offset dp.DeployConfig.L2GenesisEcotoneTimeOffset = &offset + dp.DeployConfig.L2GenesisFjordTimeOffset = nil + dp.DeployConfig.L2GenesisGraniteTimeOffset = nil + // New forks have to be added here, after changing the default deploy config! sd := e2eutils.Setup(t, dp, defaultAlloc) log := testlog.Logger(t, log.LevelDebug) @@ -159,12 +157,7 @@ func TestDencunL2ForkAfterGenesis(gt *testing.T) { func TestDencunL2ForkAtGenesis(gt *testing.T) { t := NewDefaultTesting(gt) dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) - offset := hexutil.Uint64(0) - dp.DeployConfig.L2GenesisRegolithTimeOffset = &offset - dp.DeployConfig.L1CancunTimeOffset = &offset - dp.DeployConfig.L2GenesisCanyonTimeOffset = &offset - dp.DeployConfig.L2GenesisDeltaTimeOffset = &offset - dp.DeployConfig.L2GenesisEcotoneTimeOffset = &offset + require.Zero(t, *dp.DeployConfig.L2GenesisEcotoneTimeOffset) sd := e2eutils.Setup(t, dp, defaultAlloc) log := testlog.Logger(t, log.LevelDebug) @@ -202,11 +195,6 @@ func newEngine(t Testing, sd *e2eutils.SetupData, log log.Logger) *L2Engine { func TestDencunBlobTxRPC(gt *testing.T) { t := NewDefaultTesting(gt) dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) - offset := hexutil.Uint64(0) - dp.DeployConfig.L2GenesisRegolithTimeOffset = &offset - dp.DeployConfig.L2GenesisCanyonTimeOffset = &offset - dp.DeployConfig.L2GenesisDeltaTimeOffset = &offset - dp.DeployConfig.L2GenesisEcotoneTimeOffset = &offset sd := e2eutils.Setup(t, dp, defaultAlloc) log := testlog.Logger(t, log.LevelDebug) @@ -221,11 +209,6 @@ func TestDencunBlobTxRPC(gt *testing.T) { func TestDencunBlobTxInTxPool(gt *testing.T) { t := NewDefaultTesting(gt) dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) - offset := hexutil.Uint64(0) - dp.DeployConfig.L2GenesisRegolithTimeOffset = &offset - dp.DeployConfig.L2GenesisCanyonTimeOffset = &offset - dp.DeployConfig.L2GenesisDeltaTimeOffset = &offset - dp.DeployConfig.L2GenesisEcotoneTimeOffset = &offset sd := e2eutils.Setup(t, dp, defaultAlloc) log := testlog.Logger(t, log.LevelDebug) @@ -239,11 +222,6 @@ func TestDencunBlobTxInTxPool(gt *testing.T) { func TestDencunBlobTxInclusion(gt *testing.T) { t := NewDefaultTesting(gt) dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) - offset := hexutil.Uint64(0) - dp.DeployConfig.L2GenesisRegolithTimeOffset = &offset - dp.DeployConfig.L2GenesisCanyonTimeOffset = &offset - dp.DeployConfig.L2GenesisDeltaTimeOffset = &offset - dp.DeployConfig.L2GenesisEcotoneTimeOffset = &offset sd := e2eutils.Setup(t, dp, defaultAlloc) log := testlog.Logger(t, log.LevelDebug) diff --git a/op-e2e/actions/ecotone_fork_test.go b/op-e2e/actions/ecotone_fork_test.go index 5480281632..260a796008 100644 --- a/op-e2e/actions/ecotone_fork_test.go +++ b/op-e2e/actions/ecotone_fork_test.go @@ -42,18 +42,16 @@ func verifyCodeHashMatches(t Testing, client *ethclient.Client, address common.A func TestEcotoneNetworkUpgradeTransactions(gt *testing.T) { t := NewDefaultTesting(gt) dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) - genesisBlock := hexutil.Uint64(0) ecotoneOffset := hexutil.Uint64(4) log := testlog.Logger(t, log.LevelDebug) - dp.DeployConfig.L1CancunTimeOffset = &genesisBlock // can be removed once Cancun on L1 is the default - + require.Zero(t, *dp.DeployConfig.L1CancunTimeOffset) // Activate all forks at genesis, and schedule Ecotone the block after - dp.DeployConfig.L2GenesisRegolithTimeOffset = &genesisBlock - dp.DeployConfig.L2GenesisCanyonTimeOffset = &genesisBlock - dp.DeployConfig.L2GenesisDeltaTimeOffset = &genesisBlock dp.DeployConfig.L2GenesisEcotoneTimeOffset = &ecotoneOffset + dp.DeployConfig.L2GenesisFjordTimeOffset = nil + dp.DeployConfig.L2GenesisGraniteTimeOffset = nil + // New forks have to be added here... require.NoError(t, dp.DeployConfig.Check(log), "must have valid config") sd := e2eutils.Setup(t, dp, defaultAlloc) diff --git a/op-e2e/actions/l2_engine_test.go b/op-e2e/actions/l2_engine_test.go index 6a113e0869..5d7a537b5d 100644 --- a/op-e2e/actions/l2_engine_test.go +++ b/op-e2e/actions/l2_engine_test.go @@ -1,26 +1,28 @@ package actions import ( + "encoding/binary" "errors" "math/big" "testing" - "github.com/ethereum-optimism/optimism/op-program/client/l2/engineapi" - "github.com/ethereum-optimism/optimism/op-program/client/l2/engineapi/test" + "github.com/stretchr/testify/require" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus/beacon" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/triedb" "github.com/ethereum/go-ethereum/triedb/hashdb" - "github.com/stretchr/testify/require" - - "github.com/ethereum/go-ethereum/log" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" + "github.com/ethereum-optimism/optimism/op-program/client/l2/engineapi" + "github.com/ethereum-optimism/optimism/op-program/client/l2/engineapi/test" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/sources" "github.com/ethereum-optimism/optimism/op-service/testlog" @@ -44,50 +46,62 @@ func TestL2EngineAPI(gt *testing.T) { require.NoError(t, err) // build an empty block - chainA, _ := core.GenerateChain(sd.L2Cfg.Config, genesisBlock, consensus, db, 1, func(i int, gen *core.BlockGen) { + chainA, _ := core.GenerateChain(sd.L2Cfg.Config, genesisBlock, consensus, db, 1, func(n int, gen *core.BlockGen) { gen.SetCoinbase(common.Address{'A'}) + if sd.L2Cfg.Config.IsCancun(gen.Number(), gen.Timestamp()) { + root := crypto.Keccak256Hash([]byte("A"), binary.BigEndian.AppendUint64(nil, uint64(n))) + gen.SetParentBeaconRoot(root) + } }) - payloadA, err := eth.BlockAsPayload(chainA[0], sd.RollupCfg.CanyonTime) + + payloadA, err := eth.BlockAsPayloadEnv(chainA[0], sd.RollupCfg.CanyonTime) require.NoError(t, err) // apply the payload - status, err := l2Cl.NewPayload(t.Ctx(), payloadA, nil) + status, err := l2Cl.NewPayload(t.Ctx(), payloadA.ExecutionPayload, payloadA.ParentBeaconBlockRoot) require.NoError(t, err) - require.Equal(t, status.Status, eth.ExecutionValid) + require.Equal(t, eth.ExecutionValid, status.Status) require.Equal(t, genesisBlock.Hash(), engine.l2Chain.CurrentBlock().Hash(), "processed payloads are not immediately canonical") // recognize the payload as canonical fcRes, err := l2Cl.ForkchoiceUpdate(t.Ctx(), ð.ForkchoiceState{ - HeadBlockHash: payloadA.BlockHash, + HeadBlockHash: payloadA.ExecutionPayload.BlockHash, SafeBlockHash: genesisBlock.Hash(), FinalizedBlockHash: genesisBlock.Hash(), }, nil) require.NoError(t, err) + require.Equal(t, fcRes.PayloadStatus.Status, eth.ExecutionValid) - require.Equal(t, payloadA.BlockHash, engine.l2Chain.CurrentBlock().Hash(), "now payload A is canonical") + require.Equal(t, payloadA.ExecutionPayload.BlockHash, engine.l2Chain.CurrentBlock().Hash(), "now payload A is canonical") // build an alternative block - chainB, _ := core.GenerateChain(sd.L2Cfg.Config, genesisBlock, consensus, db, 1, func(i int, gen *core.BlockGen) { + chainB, _ := core.GenerateChain(sd.L2Cfg.Config, genesisBlock, consensus, db, 1, func(n int, gen *core.BlockGen) { gen.SetCoinbase(common.Address{'B'}) + if sd.L2Cfg.Config.IsCancun(gen.Number(), gen.Timestamp()) { + root := crypto.Keccak256Hash([]byte("A"), binary.BigEndian.AppendUint64(nil, uint64(n))) + gen.SetParentBeaconRoot(root) + } }) - payloadB, err := eth.BlockAsPayload(chainB[0], sd.RollupCfg.CanyonTime) + + payloadB, err := eth.BlockAsPayloadEnv(chainB[0], sd.RollupCfg.CanyonTime) require.NoError(t, err) // apply the payload - status, err = l2Cl.NewPayload(t.Ctx(), payloadB, nil) + status, err = l2Cl.NewPayload(t.Ctx(), payloadB.ExecutionPayload, payloadB.ParentBeaconBlockRoot) require.NoError(t, err) require.Equal(t, status.Status, eth.ExecutionValid) - require.Equal(t, payloadA.BlockHash, engine.l2Chain.CurrentBlock().Hash(), "processed payloads are not immediately canonical") + require.Equal(t, payloadA.ExecutionPayload.BlockHash, engine.l2Chain.CurrentBlock().Hash(), "processed payloads are not immediately canonical") // reorg block A in favor of block B fcRes, err = l2Cl.ForkchoiceUpdate(t.Ctx(), ð.ForkchoiceState{ - HeadBlockHash: payloadB.BlockHash, + HeadBlockHash: payloadB.ExecutionPayload.BlockHash, SafeBlockHash: genesisBlock.Hash(), FinalizedBlockHash: genesisBlock.Hash(), }, nil) require.NoError(t, err) require.Equal(t, fcRes.PayloadStatus.Status, eth.ExecutionValid) - require.Equal(t, payloadB.BlockHash, engine.l2Chain.CurrentBlock().Hash(), "now payload B is canonical") + require.Equal(t, payloadB.ExecutionPayload.BlockHash, engine.l2Chain.CurrentBlock().Hash(), "now payload B is canonical") + } func TestL2EngineAPIBlockBuilding(gt *testing.T) { @@ -133,6 +147,11 @@ func TestL2EngineAPIBlockBuilding(gt *testing.T) { w = &types.Withdrawals{} } + var parentBeaconBlockRoot *common.Hash + if sd.RollupCfg.IsEcotone(uint64(nextBlockTime)) { + parentBeaconBlockRoot = &common.Hash{} + } + // Now let's ask the engine to build a block fcRes, err := l2Cl.ForkchoiceUpdate(t.Ctx(), ð.ForkchoiceState{ HeadBlockHash: parent.Hash(), @@ -146,6 +165,7 @@ func TestL2EngineAPIBlockBuilding(gt *testing.T) { NoTxPool: false, GasLimit: (*eth.Uint64Quantity)(&sd.RollupCfg.Genesis.SystemConfig.GasLimit), Withdrawals: w, + ParentBeaconBlockRoot: parentBeaconBlockRoot, }) require.NoError(t, err) require.Equal(t, fcRes.PayloadStatus.Status, eth.ExecutionValid) @@ -161,7 +181,7 @@ func TestL2EngineAPIBlockBuilding(gt *testing.T) { require.Equal(t, parent.Hash(), payload.ParentHash, "block builds on parent block") // apply the payload - status, err := l2Cl.NewPayload(t.Ctx(), payload, nil) + status, err := l2Cl.NewPayload(t.Ctx(), payload, envelope.ParentBeaconBlockRoot) require.NoError(t, err) require.Equal(t, status.Status, eth.ExecutionValid) require.Equal(t, parent.Hash(), engine.l2Chain.CurrentBlock().Hash(), "processed payloads are not immediately canonical") diff --git a/op-e2e/actions/span_batch_test.go b/op-e2e/actions/span_batch_test.go index 85da7d5b38..23f5963fa9 100644 --- a/op-e2e/actions/span_batch_test.go +++ b/op-e2e/actions/span_batch_test.go @@ -132,6 +132,11 @@ func TestHardforkMiddleOfSpanBatch(gt *testing.T) { // Activate HF in the middle of the first epoch deltaOffset := hexutil.Uint64(6) applyDeltaTimeOffset(dp, &deltaOffset) + // Applies to HF that goes into Delta. Otherwise we end up with more upgrade txs and things during this case. + dp.DeployConfig.L2GenesisEcotoneTimeOffset = nil + dp.DeployConfig.L2GenesisFjordTimeOffset = nil + dp.DeployConfig.L2GenesisGraniteTimeOffset = nil + sd := e2eutils.Setup(t, dp, defaultAlloc) log := testlog.Logger(t, log.LevelError) miner, seqEngine, sequencer := setupSequencerTest(t, sd, log) diff --git a/op-e2e/actions/system_config_test.go b/op-e2e/actions/system_config_test.go index d6d97a3b19..452d5dbc30 100644 --- a/op-e2e/actions/system_config_test.go +++ b/op-e2e/actions/system_config_test.go @@ -228,6 +228,14 @@ func GPOParamsChange(gt *testing.T, deltaTimeOffset *hexutil.Uint64) { t := NewDefaultTesting(gt) dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) applyDeltaTimeOffset(dp, deltaTimeOffset) + + // activating Delta only, not Ecotone and further: + // the GPO change assertions here all apply only for the Delta transition. + // Separate tests cover Ecotone GPO changes. + dp.DeployConfig.L2GenesisEcotoneTimeOffset = nil + dp.DeployConfig.L2GenesisFjordTimeOffset = nil + dp.DeployConfig.L2GenesisGraniteTimeOffset = nil + sd := e2eutils.Setup(t, dp, defaultAlloc) log := testlog.Logger(t, log.LevelDebug) miner, seqEngine, sequencer := setupSequencerTest(t, sd, log) diff --git a/op-e2e/system_adminrpc_test.go b/op-e2e/system_adminrpc_test.go index e7c0af673b..c0b9e60abd 100644 --- a/op-e2e/system_adminrpc_test.go +++ b/op-e2e/system_adminrpc_test.go @@ -198,19 +198,19 @@ func TestPostUnsafePayload(t *testing.T) { blockNumberOne, err := l2Seq.BlockByNumber(ctx, big.NewInt(1)) require.NoError(t, err) - payload, err := eth.BlockAsPayload(blockNumberOne, sys.RollupConfig.CanyonTime) + payloadEnv, err := eth.BlockAsPayloadEnv(blockNumberOne, sys.RollupConfig.CanyonTime) require.NoError(t, err) - err = rollupClient.PostUnsafePayload(ctx, ð.ExecutionPayloadEnvelope{ExecutionPayload: payload}) + err = rollupClient.PostUnsafePayload(ctx, payloadEnv) require.NoError(t, err) require.NoError(t, wait.ForUnsafeBlock(ctx, rollupClient, 1), "Chain did not advance after posting payload") // Test validation blockNumberTwo, err := l2Seq.BlockByNumber(ctx, big.NewInt(2)) require.NoError(t, err) - payload, err = eth.BlockAsPayload(blockNumberTwo, sys.RollupConfig.CanyonTime) + payloadEnv, err = eth.BlockAsPayloadEnv(blockNumberTwo, sys.RollupConfig.CanyonTime) require.NoError(t, err) - payload.BlockHash = common.Hash{0xaa} - err = rollupClient.PostUnsafePayload(ctx, ð.ExecutionPayloadEnvelope{ExecutionPayload: payload}) + payloadEnv.ExecutionPayload.BlockHash = common.Hash{0xaa} + err = rollupClient.PostUnsafePayload(ctx, payloadEnv) require.ErrorContains(t, err, "payload has bad block hash") } diff --git a/op-e2e/system_tob_test.go b/op-e2e/system_tob_test.go index ce3ddf46c5..284c775a8c 100644 --- a/op-e2e/system_tob_test.go +++ b/op-e2e/system_tob_test.go @@ -5,6 +5,7 @@ import ( "context" "crypto/ecdsa" "fmt" + "math" "math/big" "math/rand" "testing" @@ -19,10 +20,10 @@ import ( "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait" "github.com/ethereum-optimism/optimism/op-node/bindings" bindingspreview "github.com/ethereum-optimism/optimism/op-node/bindings/preview" + "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/predeploys" "github.com/ethereum-optimism/optimism/op-service/testutils/fuzzerutils" "github.com/ethereum/go-ethereum/accounts" - "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" @@ -41,17 +42,16 @@ func TestGasPriceOracleFeeUpdates(t *testing.T) { defer ctxCancel() InitParallel(t) - // Define our values to set in the GasPriceOracle (we set them high to see if it can lock L2 or stop bindings - // from updating the prices once again. - overheadValue := new(big.Int).Set(abi.MaxUint256) - // Ensure the most significant byte is 0x00 - scalarValue := new(big.Int).Rsh(new(big.Int).Set(abi.MaxUint256), 8) + maxScalars := eth.EcotoneScalars{ + BaseFeeScalar: math.MaxUint32, + BlobBaseFeeScalar: math.MaxUint32, + } var cancel context.CancelFunc // Create our system configuration for L1/L2 and start it cfg := DefaultSystemConfig(t) sys, err := cfg.Start(t) - require.Nil(t, err, "Error starting up system") + require.NoError(t, err, "Error starting up system") defer sys.Close() // Obtain our sequencer, verifier, and transactor keypair. @@ -62,66 +62,61 @@ func TestGasPriceOracleFeeUpdates(t *testing.T) { // Bind to the SystemConfig & GasPriceOracle contracts sysconfig, err := legacybindings.NewSystemConfig(cfg.L1Deployments.SystemConfigProxy, l1Client) - require.Nil(t, err) + require.NoError(t, err) gpoContract, err := legacybindings.NewGasPriceOracleCaller(predeploys.GasPriceOracleAddr, l2Seq) - require.Nil(t, err) + require.NoError(t, err) // Obtain our signer. opts, err := bind.NewKeyedTransactorWithChainID(ethPrivKey, cfg.L1ChainIDBig()) - require.Nil(t, err) + require.NoError(t, err) // Define our L1 transaction timeout duration. txTimeoutDuration := 10 * time.Duration(cfg.DeployConfig.L1BlockTime) * time.Second // Update the gas config, wait for it to show up on L2, & verify that it was set as intended opts.Context, cancel = context.WithTimeout(ctx, txTimeoutDuration) - tx, err := sysconfig.SetGasConfig(opts, overheadValue, scalarValue) + tx, err := sysconfig.SetGasConfigEcotone(opts, maxScalars.BaseFeeScalar, maxScalars.BlobBaseFeeScalar) cancel() - require.Nil(t, err, "sending overhead update tx") + require.NoError(t, err, "SetGasConfigEcotone update tx") receipt, err := wait.ForReceiptOK(ctx, l1Client, tx.Hash()) - require.Nil(t, err, "Waiting for sysconfig set gas config update tx") + require.NoError(t, err, "Waiting for sysconfig set gas config update tx") _, err = geth.WaitForL1OriginOnL2(sys.RollupConfig, receipt.BlockNumber.Uint64(), l2Seq, txTimeoutDuration) require.NoError(t, err, "waiting for L2 block to include the sysconfig update") - gpoOverhead, err := gpoContract.Overhead(&bind.CallOpts{}) - require.Nil(t, err, "reading gpo overhead") - gpoScalar, err := gpoContract.Scalar(&bind.CallOpts{}) - require.Nil(t, err, "reading gpo scalar") + baseFeeScalar, err := gpoContract.BaseFeeScalar(&bind.CallOpts{}) + require.NoError(t, err, "reading base fee scalar") + require.Equal(t, baseFeeScalar, maxScalars.BaseFeeScalar) - if gpoOverhead.Cmp(overheadValue) != 0 { - t.Errorf("overhead that was found (%v) is not what was set (%v)", gpoOverhead, overheadValue) - } - if gpoScalar.Cmp(scalarValue) != 0 { - t.Errorf("scalar that was found (%v) is not what was set (%v)", gpoScalar, scalarValue) - } + blobBaseFeeScalar, err := gpoContract.BlobBaseFeeScalar(&bind.CallOpts{}) + require.NoError(t, err, "reading blob base fee scalar") + require.Equal(t, blobBaseFeeScalar, maxScalars.BlobBaseFeeScalar) // Now modify the scalar value & ensure that the gas params can be modified - scalarValue = big.NewInt(params.Ether) + normalScalars := eth.EcotoneScalars{ + BaseFeeScalar: 1e6, + BlobBaseFeeScalar: 1e6, + } opts.Context, cancel = context.WithTimeout(context.Background(), txTimeoutDuration) - tx, err = sysconfig.SetGasConfig(opts, overheadValue, scalarValue) + tx, err = sysconfig.SetGasConfigEcotone(opts, normalScalars.BaseFeeScalar, normalScalars.BlobBaseFeeScalar) cancel() - require.Nil(t, err, "sending overhead update tx") + require.NoError(t, err, "SetGasConfigEcotone update tx") receipt, err = wait.ForReceiptOK(ctx, l1Client, tx.Hash()) - require.Nil(t, err, "Waiting for sysconfig set gas config update tx") + require.NoError(t, err, "Waiting for sysconfig set gas config update tx") _, err = geth.WaitForL1OriginOnL2(sys.RollupConfig, receipt.BlockNumber.Uint64(), l2Seq, txTimeoutDuration) require.NoError(t, err, "waiting for L2 block to include the sysconfig update") - gpoOverhead, err = gpoContract.Overhead(&bind.CallOpts{}) - require.Nil(t, err, "reading gpo overhead") - gpoScalar, err = gpoContract.Scalar(&bind.CallOpts{}) - require.Nil(t, err, "reading gpo scalar") + baseFeeScalar, err = gpoContract.BaseFeeScalar(&bind.CallOpts{}) + require.NoError(t, err, "reading base fee scalar") + require.Equal(t, baseFeeScalar, normalScalars.BaseFeeScalar) - if gpoOverhead.Cmp(overheadValue) != 0 { - t.Errorf("overhead that was found (%v) is not what was set (%v)", gpoOverhead, overheadValue) - } - if gpoScalar.Cmp(scalarValue) != 0 { - t.Errorf("scalar that was found (%v) is not what was set (%v)", gpoScalar, scalarValue) - } + blobBaseFeeScalar, err = gpoContract.BlobBaseFeeScalar(&bind.CallOpts{}) + require.NoError(t, err, "reading blob base fee scalar") + require.Equal(t, blobBaseFeeScalar, normalScalars.BlobBaseFeeScalar) } // TestL2SequencerRPCDepositTx checks that the L2 sequencer will not accept DepositTx type transactions. diff --git a/op-program/client/l2/engineapi/test/l2_engine_api_tests.go b/op-program/client/l2/engineapi/test/l2_engine_api_tests.go index 1d8a9ff61f..4a78e258e7 100644 --- a/op-program/client/l2/engineapi/test/l2_engine_api_tests.go +++ b/op-program/client/l2/engineapi/test/l2_engine_api_tests.go @@ -2,18 +2,21 @@ package test import ( "context" + "math/big" "testing" + "github.com/stretchr/testify/require" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-program/client/l2/engineapi" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/testlog" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/params" - "github.com/stretchr/testify/require" ) var gasLimit = eth.Uint64Quantity(30_000_000) @@ -109,7 +112,7 @@ func RunEngineAPITests(t *testing.T, createBackend func(t *testing.T) engineapi. payload := envelope.ExecutionPayload api.assert.Equal(genesis.Hash(), payload.ParentHash, "should have old block as parent") - api.newPayload(payload) + api.newPayload(envelope) api.forkChoiceUpdated(payload.BlockHash, genesis.Hash(), genesis.Hash()) api.assert.Equal(payload.BlockHash, api.headHash(), "should reorg to block built on old parent") }) @@ -138,13 +141,12 @@ func RunEngineAPITests(t *testing.T, createBackend func(t *testing.T) engineapi. // Build a valid block payloadID := api.startBlockBuilding(genesis, eth.Uint64Quantity(genesis.Time+2)) envelope := api.getPayload(payloadID) - newBlock := envelope.ExecutionPayload // But then make it invalid by changing the state root - newBlock.StateRoot = eth.Bytes32(genesis.TxHash) + envelope.ExecutionPayload.StateRoot = eth.Bytes32(genesis.TxHash) updateBlockHash(envelope) - r, err := api.engine.NewPayloadV2(api.ctx, newBlock) + r, err := api.callNewPayload(envelope) api.assert.NoError(err) api.assert.Equal(eth.ExecutionInvalid, r.Status) }) @@ -156,13 +158,12 @@ func RunEngineAPITests(t *testing.T, createBackend func(t *testing.T) engineapi. // Start with a valid time payloadID := api.startBlockBuilding(genesis, eth.Uint64Quantity(genesis.Time+1)) envelope := api.getPayload(payloadID) - newBlock := envelope.ExecutionPayload // Then make it invalid to check NewPayload rejects it - newBlock.Timestamp = eth.Uint64Quantity(genesis.Time) + envelope.ExecutionPayload.Timestamp = eth.Uint64Quantity(genesis.Time) updateBlockHash(envelope) - r, err := api.engine.NewPayloadV2(api.ctx, newBlock) + r, err := api.callNewPayload(envelope) api.assert.NoError(err) api.assert.Equal(eth.ExecutionInvalid, r.Status) }) @@ -174,13 +175,12 @@ func RunEngineAPITests(t *testing.T, createBackend func(t *testing.T) engineapi. // Start with a valid time payloadID := api.startBlockBuilding(genesis, eth.Uint64Quantity(genesis.Time+1)) envelope := api.getPayload(payloadID) - newBlock := envelope.ExecutionPayload // Then make it invalid to check NewPayload rejects it - newBlock.Timestamp = eth.Uint64Quantity(genesis.Time - 1) + envelope.ExecutionPayload.Timestamp = eth.Uint64Quantity(genesis.Time - 1) updateBlockHash(envelope) - r, err := api.engine.NewPayloadV2(api.ctx, newBlock) + r, err := api.callNewPayload(envelope) api.assert.NoError(err) api.assert.Equal(eth.ExecutionInvalid, r.Status) }) @@ -363,7 +363,7 @@ func (h *testHelper) addBlockWithParent(head *types.Header, timestamp eth.Uint64 h.assert.Equal(head.Hash(), block.ParentHash, "should have correct parent") h.assert.Len(block.Transactions, len(txs)) - h.newPayload(block) + h.newPayload(envelope) // Should not have changed the chain head yet h.assert.Equal(prevHead, h.backend.CurrentHeader()) @@ -395,25 +395,35 @@ func (h *testHelper) startBlockBuilding(head *types.Header, newBlockTimestamp et txData = append(txData, rlp) } - canyonTime := h.backend.Config().CanyonTime - var w *types.Withdrawals - if canyonTime != nil && *canyonTime <= uint64(newBlockTimestamp) { - w = &types.Withdrawals{} - } - - result, err := h.engine.ForkchoiceUpdatedV2(h.ctx, ð.ForkchoiceState{ - HeadBlockHash: head.Hash(), - SafeBlockHash: head.Hash(), - FinalizedBlockHash: head.Hash(), - }, ð.PayloadAttributes{ + attr := ð.PayloadAttributes{ Timestamp: newBlockTimestamp, PrevRandao: eth.Bytes32(head.MixDigest), SuggestedFeeRecipient: feeRecipient, Transactions: txData, NoTxPool: true, GasLimit: &gasLimit, - Withdrawals: w, - }) + } + n := new(big.Int).Add(head.Number, big.NewInt(1)) + if h.backend.Config().IsShanghai(n, uint64(newBlockTimestamp)) { + attr.Withdrawals = &types.Withdrawals{} + } + if h.backend.Config().IsCancun(n, uint64(newBlockTimestamp)) { + attr.ParentBeaconBlockRoot = &common.Hash{} + } + fcState := ð.ForkchoiceState{ + HeadBlockHash: head.Hash(), + SafeBlockHash: head.Hash(), + FinalizedBlockHash: head.Hash(), + } + var result *eth.ForkchoiceUpdatedResult + var err error + if h.backend.Config().IsCancun(n, uint64(newBlockTimestamp)) { + result, err = h.engine.ForkchoiceUpdatedV3(h.ctx, fcState, attr) + } else if h.backend.Config().IsShanghai(n, uint64(newBlockTimestamp)) { + result, err = h.engine.ForkchoiceUpdatedV2(h.ctx, fcState, attr) + } else { + result, err = h.engine.ForkchoiceUpdatedV1(h.ctx, fcState, attr) + } h.assert.NoError(err) h.assert.Equal(eth.ExecutionValid, result.PayloadStatus.Status) id := result.PayloadID @@ -423,16 +433,25 @@ func (h *testHelper) startBlockBuilding(head *types.Header, newBlockTimestamp et func (h *testHelper) getPayload(id *eth.PayloadID) *eth.ExecutionPayloadEnvelope { h.Log("getPayload", "id", id) - envelope, err := h.engine.GetPayloadV2(h.ctx, *id) + envelope, err := h.engine.GetPayloadV2(h.ctx, *id) // calls the same underlying function as V1 and V3 h.assert.NoError(err) h.assert.NotNil(envelope) h.assert.NotNil(envelope.ExecutionPayload) return envelope } -func (h *testHelper) newPayload(block *eth.ExecutionPayload) { - h.Log("newPayload", "hash", block.BlockHash) - r, err := h.engine.NewPayloadV2(h.ctx, block) +func (h *testHelper) callNewPayload(envelope *eth.ExecutionPayloadEnvelope) (*eth.PayloadStatusV1, error) { + n := new(big.Int).SetUint64(uint64(envelope.ExecutionPayload.BlockNumber)) + if h.backend.Config().IsCancun(n, uint64(envelope.ExecutionPayload.Timestamp)) { + return h.engine.NewPayloadV3(h.ctx, envelope.ExecutionPayload, []common.Hash{}, envelope.ParentBeaconBlockRoot) + } else { + return h.engine.NewPayloadV2(h.ctx, envelope.ExecutionPayload) + } +} + +func (h *testHelper) newPayload(envelope *eth.ExecutionPayloadEnvelope) { + h.Log("newPayload", "hash", envelope.ExecutionPayload.BlockHash) + r, err := h.callNewPayload(envelope) h.assert.NoError(err) h.assert.Equal(eth.ExecutionValid, r.Status) h.assert.Nil(r.ValidationError) diff --git a/ops-bedrock/beacon-data/config.yaml b/ops-bedrock/beacon-data/config.yaml index 0e2be808bb..0358aef317 100644 --- a/ops-bedrock/beacon-data/config.yaml +++ b/ops-bedrock/beacon-data/config.yaml @@ -48,8 +48,7 @@ CAPELLA_FORK_VERSION: 0x03000001 CAPELLA_FORK_EPOCH: 0 # DENEB DENEB_FORK_VERSION: 0x04000001 -# TODO: activate Deneb at genesis -DENEB_FORK_EPOCH: 1 +DENEB_FORK_EPOCH: 0 # EIP6110 EIP6110_FORK_VERSION: 0x05000001 diff --git a/ops-bedrock/l1-generate-beacon-genesis.sh b/ops-bedrock/l1-generate-beacon-genesis.sh index 04ea8d1114..2fa3534659 100644 --- a/ops-bedrock/l1-generate-beacon-genesis.sh +++ b/ops-bedrock/l1-generate-beacon-genesis.sh @@ -4,7 +4,7 @@ set -eu echo "eth2-testnet-genesis path: $(which eth2-testnet-genesis)" -eth2-testnet-genesis capella \ +eth2-testnet-genesis deneb \ --config=./beacon-data/config.yaml \ --preset-phase0=minimal \ --preset-altair=minimal \ diff --git a/packages/contracts-bedrock/deploy-config/devnetL1-template.json b/packages/contracts-bedrock/deploy-config/devnetL1-template.json index 12694499cb..c56fd92a3a 100644 --- a/packages/contracts-bedrock/deploy-config/devnetL1-template.json +++ b/packages/contracts-bedrock/deploy-config/devnetL1-template.json @@ -46,8 +46,9 @@ "l2GenesisRegolithTimeOffset": "0x0", "l2GenesisCanyonTimeOffset": "0x0", "l2GenesisDeltaTimeOffset": "0x0", - "l2GenesisEcotoneTimeOffset": "0x40", - "l1CancunTimeOffset": "0x30", + "l2GenesisEcotoneTimeOffset": "0x0", + "l2GenesisFjordTimeOffset": "0x0", + "l1CancunTimeOffset": "0x0", "systemConfigStartBlock": 0, "requiredProtocolVersion": "0x0000000000000000000000000000000000000000000000000000000000000000", "recommendedProtocolVersion": "0x0000000000000000000000000000000000000000000000000000000000000000", From 7343468ac9f527e6b93bf93d9304375076581bf1 Mon Sep 17 00:00:00 2001 From: tre Date: Thu, 8 Aug 2024 10:17:02 -0700 Subject: [PATCH 11/29] feat(predeploys): add L2toL2CDM to predeploy addresses.go (#11403) --- op-service/predeploys/addresses.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/op-service/predeploys/addresses.go b/op-service/predeploys/addresses.go index c9b6bcfd63..a03fcf2918 100644 --- a/op-service/predeploys/addresses.go +++ b/op-service/predeploys/addresses.go @@ -26,6 +26,7 @@ const ( SchemaRegistry = "0x4200000000000000000000000000000000000020" EAS = "0x4200000000000000000000000000000000000021" CrossL2Inbox = "0x4200000000000000000000000000000000000022" + L2toL2CrossDomainMessenger = "0x4200000000000000000000000000000000000023" Create2Deployer = "0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2" MultiCall3 = "0xcA11bde05977b3631167028862bE2a173976CA11" Safe_v130 = "0x69f4D1788e39c87893C980c06EdF4b7f686e2938" @@ -62,6 +63,7 @@ var ( SchemaRegistryAddr = common.HexToAddress(SchemaRegistry) EASAddr = common.HexToAddress(EAS) CrossL2InboxAddr = common.HexToAddress(CrossL2Inbox) + L2toL2CrossDomainMessengerAddr = common.HexToAddress(L2toL2CrossDomainMessenger) Create2DeployerAddr = common.HexToAddress(Create2Deployer) MultiCall3Addr = common.HexToAddress(MultiCall3) Safe_v130Addr = common.HexToAddress(Safe_v130) @@ -91,6 +93,8 @@ func init() { Predeploys["L1BlockNumber"] = &Predeploy{Address: L1BlockNumberAddr} Predeploys["GasPriceOracle"] = &Predeploy{Address: GasPriceOracleAddr} Predeploys["L1Block"] = &Predeploy{Address: L1BlockAddr} + Predeploys["CrossL2Inbox"] = &Predeploy{Address: CrossL2InboxAddr} + Predeploys["L2toL2CrossDomainMessenger"] = &Predeploy{Address: L2toL2CrossDomainMessengerAddr} Predeploys["GovernanceToken"] = &Predeploy{ Address: GovernanceTokenAddr, ProxyDisabled: true, From 0c8d7c8c5186ee520ed7d612039c55b6a35b61bf Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 8 Aug 2024 22:06:18 +0300 Subject: [PATCH 12/29] contracts-bedrock: debug tests (#11397) * contracts-bedrock: debug tests See why the tests are flaking and cannot be reproduced locally. Also modularize/cleanup CI along the way * typo: fix * debug: remove * just: update name * ci: better error help * ci: fix typo * contracts-bedrock: abstract * ci: run with foundry profile ci --- .circleci/config.yml | 46 ++++++++++++++++------------- packages/contracts-bedrock/justfile | 9 ++++++ 2 files changed, 34 insertions(+), 21 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d171341ca1..c6e073c996 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -103,6 +103,13 @@ commands: pip3 install -r requirements.txt python3 main.py "<>" + install-contracts-dependencies: + description: "Install the dependencies for the smart contracts" + steps: + - run: + command: just install + working_directory: packages/contracts-bedrock + notify-failures-on-develop: description: "Notify Slack" parameters: @@ -180,9 +187,7 @@ jobs: - run: name: "Check L1 geth version" command: ./ops/scripts/geth-version-checker.sh || (echo "geth version is wrong, update ci-builder"; false) - - run: - name: git submodules - command: make submodules + - install-contracts-dependencies - restore_cache: name: Restore PNPM Package Cache keys: @@ -516,9 +521,7 @@ jobs: resource_class: xlarge steps: - checkout - - run: - name: git submodules - command: make submodules + - install-contracts-dependencies - check-changed: patterns: contracts-bedrock,op-node - run: @@ -545,11 +548,13 @@ jobs: resource_class: xlarge steps: - checkout - - run: - name: git submodules - command: make submodules - check-changed: patterns: contracts-bedrock,op-node + - install-contracts-dependencies + - run: + name: print dependencies + command: just dep-status + working_directory: packages/contracts-bedrock - run: name: print forge version command: forge --version @@ -561,6 +566,13 @@ jobs: FOUNDRY_PROFILE: ci working_directory: packages/contracts-bedrock no_output_timeout: 15m + - run: + name: print failed test traces + command: just test-rerun + environment: + FOUNDRY_PROFILE: ci + working_directory: packages/contracts-bedrock + when: on_fail contracts-bedrock-checks: docker: @@ -568,9 +580,7 @@ jobs: resource_class: xlarge steps: - checkout - - run: - name: git submodules - command: make submodules + - install-contracts-dependencies - restore_cache: name: Restore PNPM Package Cache keys: @@ -1071,9 +1081,7 @@ jobs: key: gomod-{{ checksum "go.sum" }} - restore_cache: key: golang-build-cache - - run: - name: git submodules - command: make submodules + - install-contracts-dependencies - run: name: generate devnet allocs command: make devnet-allocs @@ -1171,9 +1179,7 @@ jobs: name: Install pnpm command: | npm i pnpm --global - - run: - name: git submodules - command: make submodules + - install-contracts-dependencies - attach_workspace: at: "." - when: @@ -1486,9 +1492,7 @@ jobs: resource_class: xlarge steps: - checkout - - run: - name: Checkout Submodule - command: make submodules + - install-contracts-dependencies - check-changed: no_go_deps: "true" patterns: contracts-bedrock/test/kontrol,contracts-bedrock/src/L1/OptimismPortal\.sol,contracts-bedrock/src/L1/OptimismPortal2\.sol,contracts-bedrock/src/L1/L1CrossDomainMessenger\.sol,contracts-bedrock/src/L1/L1ERC721Bridge\.sol,contracts-bedrock/src/L1/L1StandardBridge\.sol,contracts-bedrock/src/L1/ResourceMetering\.sol,contracts-bedrock/src/universal/StandardBridge\.sol,contracts-bedrock/src/universal/ERC721Bridge\.sol,contracts-bedrock/src/universal/CrossDomainMessenger\.sol diff --git a/packages/contracts-bedrock/justfile b/packages/contracts-bedrock/justfile index b983776e73..c55cb3d381 100644 --- a/packages/contracts-bedrock/justfile +++ b/packages/contracts-bedrock/justfile @@ -1,6 +1,12 @@ prebuild: ./scripts/checks/check-foundry-install.sh +dep-status: + git submodule status + +install: + forge install + build: prebuild forge build @@ -16,6 +22,9 @@ test: build-go-ffi test-kontrol: ./test/kontrol/scripts/run-kontrol.sh script +test-rerun: build-go-ffi + forge test --rerun -vvv + genesis: forge script scripts/L2Genesis.s.sol:L2Genesis --sig 'runWithStateDump()' From bf4693e76db85148121aea35904755672a153449 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 8 Aug 2024 23:19:00 +0300 Subject: [PATCH 13/29] ci: better solc warnings check (#11231) * ci: better solc warnings check Use `forge build --force` to force a build so that the warning check can be observed. CI should fail on this commit * contracts-bedrock: fix warnings Fix the failed solc build See the failed workflow here: https://app.circleci.com/pipelines/github/ethereum-optimism/optimism/59631/workflows/b93bc600-e772-4ba9-98ed-a0b6f48683c7/jobs/2512271 * foundry: add ignored error code --- .circleci/config.yml | 5 +---- packages/contracts-bedrock/foundry.toml | 3 ++- .../contracts-bedrock/test/dispute/FaultDisputeGame.t.sol | 1 - 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index c6e073c996..b839cd9779 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -599,12 +599,9 @@ jobs: name: forge version command: forge --version - run: - # The solc warnings check must be the first step to build the contracts, that way the - # warnings are output here. On subsequent runs, forge will read artifacts from the cache - # so warnings would not occur. name: solc warnings check command: | - forge build --deny-warnings || echo "export SOLC_WARNINGS_CHECK=1" >> "$BASH_ENV" + forge build --force --deny-warnings || echo "export SOLC_WARNINGS_CHECK=1" >> "$BASH_ENV" environment: FOUNDRY_PROFILE: ci working_directory: packages/contracts-bedrock diff --git a/packages/contracts-bedrock/foundry.toml b/packages/contracts-bedrock/foundry.toml index e5d8513f25..a373761b8f 100644 --- a/packages/contracts-bedrock/foundry.toml +++ b/packages/contracts-bedrock/foundry.toml @@ -27,7 +27,8 @@ bytecode_hash = 'none' build_info_path = 'artifacts/build-info' ast = true evm_version = "cancun" -ignored_error_codes = ["transient-storage", "code-size", "init-code-size"] +# 5159 error code is selfdestruct error code +ignored_error_codes = ["transient-storage", "code-size", "init-code-size", 5159] # We set the gas limit to max int64 to avoid running out of gas during testing, since the default # gas limit is 1B and some of our tests require more gas than that, such as `test_callWithMinGas_noLeakageLow_succeeds`. diff --git a/packages/contracts-bedrock/test/dispute/FaultDisputeGame.t.sol b/packages/contracts-bedrock/test/dispute/FaultDisputeGame.t.sol index ccf6bce1a1..2aae76b2db 100644 --- a/packages/contracts-bedrock/test/dispute/FaultDisputeGame.t.sol +++ b/packages/contracts-bedrock/test/dispute/FaultDisputeGame.t.sol @@ -870,7 +870,6 @@ contract FaultDisputeGame_Test is FaultDisputeGame_Init { (,,,, disputed,,) = gameProxy.claimData(5); gameProxy.attack{ value: _getRequiredBond(5) }(disputed, 5, _dummyClaim()); (,,,, disputed,,) = gameProxy.claimData(6); - bytes memory _dummyClaimData = abi.encode(gasleft(), gasleft()); gameProxy.defend{ value: _getRequiredBond(6) }(disputed, 6, postState_); (,,,, disputed,,) = gameProxy.claimData(7); From 770cbc62571423a0ab8bd9c00a02389b991c4563 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Fri, 9 Aug 2024 03:30:56 +0300 Subject: [PATCH 14/29] repo: migrate away from pnpm (#11395) Migrate to just from pnpm. This is continued tech debt cleanup away from `pnpm` and typescript that is no longer used. --- .circleci/config.yml | 68 +- .github/actions/setup/action.yml | 24 - .nvmrc | 1 - CONTRIBUTING.md | 20 +- Makefile | 10 +- justfile | 44 + op-e2e/README.md | 2 +- ops/docker/ci-builder/Dockerfile | 14 +- package.json | 26 - packages/contracts-bedrock/CONTRIBUTING.md | 3 +- .../invariant-docs/README.md | 2 +- .../scripts/checks/check-foundry-install.sh | 4 +- .../scripts/getting-started/versions.sh | 2 - .../scripts/go-ffi/README.md | 2 +- .../contracts-bedrock/test/kontrol/README.md | 4 +- pnpm-lock.yaml | 3533 ----------------- pnpm-workspace.yaml | 2 - 17 files changed, 69 insertions(+), 3692 deletions(-) delete mode 100644 .nvmrc create mode 100644 justfile delete mode 100644 package.json delete mode 100644 pnpm-lock.yaml delete mode 100644 pnpm-workspace.yaml diff --git a/.circleci/config.yml b/.circleci/config.yml index b839cd9779..af9a7bae13 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -188,38 +188,18 @@ jobs: name: "Check L1 geth version" command: ./ops/scripts/geth-version-checker.sh || (echo "geth version is wrong, update ci-builder"; false) - install-contracts-dependencies - - restore_cache: - name: Restore PNPM Package Cache - keys: - - pnpm-packages-v2-{{ checksum "pnpm-lock.yaml" }} - restore_cache: name: Restore Go modules cache key: gomod-{{ checksum "go.sum" }} - # Fetch node_modules into the pnpm store - # This will cache node_modules based on pnpm-lock so other steps can instantly install them with `pnpm install --prefer-offline` - # --prefer-offline installs node_modules instantly by just reading from cache if it exists rather than fetching from network - # when installing node_modules pnpm simply adds symlinks instead of copying the files which is why it is pretty much instant to run --prefer-offline - # this allows a caching strategy of only checking pnpm-lockfile so we don't have to keep it in sync with our packages - # For more information see https://pnpm.io/cli/fetch - - run: - name: Fetch dependencies - command: pnpm fetch --frozen-lockfile --prefer-offline - - save_cache: - name: Save PNPM Package Cache - key: pnpm-packages-v2-{{ checksum "pnpm-lock.yaml" }} - paths: - - "node_modules" - - run: - name: Install dependencies - command: pnpm install - run: name: print forge version command: forge --version - run: - name: Build monorepo + name: Build contracts environment: FOUNDRY_PROFILE: ci - command: pnpm build + command: just build + working_directory: packages/contracts-bedrock - run: name: Generate L2OO allocs command: DEVNET_L2OO="true" make devnet-allocs @@ -244,12 +224,9 @@ jobs: - persist_to_workspace: root: "." paths: - - "packages/**/dist" - "packages/contracts-bedrock/cache" - "packages/contracts-bedrock/artifacts" - "packages/contracts-bedrock/forge-artifacts" - - "packages/contracts-bedrock/tsconfig.tsbuildinfo" - - "packages/contracts-bedrock/tsconfig.build.tsbuildinfo" - ".devnet/allocs-l1.json" - ".devnet/allocs-l2-delta.json" - ".devnet/allocs-l2-ecotone.json" @@ -580,21 +557,12 @@ jobs: resource_class: xlarge steps: - checkout - - install-contracts-dependencies - - restore_cache: - name: Restore PNPM Package Cache - keys: - - pnpm-packages-v2-{{ checksum "pnpm-lock.yaml" }} - attach_workspace: { at: "." } + - install-contracts-dependencies - check-changed: patterns: contracts-bedrock,op-node - setup_remote_docker: docker_layer_caching: true - # populate node modules from the cache - - run: - name: Install dependencies - command: pnpm install - working_directory: packages/contracts-bedrock - run: name: forge version command: forge --version @@ -692,14 +660,7 @@ jobs: resource_class: medium steps: - checkout - - restore_cache: - name: Restore PNPM Package Cache - keys: - - pnpm-packages-v2-{{ checksum "pnpm-lock.yaml" }} - attach_workspace: { at: "." } - - run: - name: Install dependencies - command: pnpm install - check-changed: patterns: contracts-bedrock - run: @@ -1156,26 +1117,11 @@ jobs: echo 'export PATH=$HOME/.foundry/bin:$PATH' >> $BASH_ENV source $HOME/.bashrc forge --version - - run: - name: Install NVM - command: | - curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash - source ~/.bashrc - nvm --version - - run: - name: Install Node - command: | - nvm install - nvm use && node --version && npm --version - run: name: Install Just command: | curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to $HOME/bin echo 'export PATH="${PATH}:$HOME/bin"' >> $BASH_ENV - - run: - name: Install pnpm - command: | - npm i pnpm --global - install-contracts-dependencies - attach_workspace: at: "." @@ -1204,9 +1150,9 @@ jobs: docker tag "$IMAGE_BASE_PREFIX/op-challenger:<>" "$IMAGE_BASE_PREFIX/op-challenger:devnet" docker tag "$IMAGE_BASE_PREFIX/da-server:<>" "$IMAGE_BASE_PREFIX/da-server:devnet" - run: - name: pnpm install and build - command: | - pnpm install && pnpm build + name: Build contracts + working_directory: packages/contracts-bedrock + command: just build - run: name: Bring up the stack command: | diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index 281ccf7b01..4c89185664 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -3,29 +3,5 @@ description: Common setup steps used by our workflows runs: using: composite steps: - - name: Setup pnpm - uses: pnpm/action-setup@v3 - with: - version: 9 - - name: Setup node - uses: actions/setup-node@v3 - with: - node-version-file: .nvmrc - registry-url: https://registry.npmjs.org - cache: pnpm - - name: Setup foundry uses: foundry-rs/foundry-toolchain@v1 - - - name: Install node dependencies - shell: bash - run: pnpm install --frozen-lockfile - - name: Derive appropriate SHAs for base and head for `nx affected` commands - uses: nrwl/nx-set-shas@v3 - with: - main-branch-name: "develop" - - run: | - echo "nx using following shas:" - echo "BASE: ${{ env.NX_BASE }}" - echo "HEAD: ${{ env.NX_HEAD }}" - shell: bash diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index 805b5a4e00..0000000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -v20.9.0 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 30f9e25db0..c96ecf7bf1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -27,7 +27,7 @@ Interactions within this repository are subject to a [Code of Conduct](https://g | [go](https://go.dev/) | `^1.21` | `go version` | | [node](https://nodejs.org/en/) | `^20` | `node --version` | | [nvm](https://github.com/nvm-sh/nvm) | `^0.39` | `nvm --version` | -| [pnpm](https://pnpm.io/installation) | `^8` | `pnpm --version` | +| [just](https://github.com/casey/just) | `^1.34.0`| `just --version` | | [foundry](https://github.com/foundry-rs/foundry#installation) | `^0.2.0` | `forge --version` | | [make](https://linux.die.net/man/1/make) | `^3` | `make --version` | | [jq](https://github.com/jqlang/jq) | `^1.6` | `jq --version` | @@ -46,7 +46,7 @@ You can use [`nvm`](https://github.com/nvm-sh/nvm) to manage multiple versions o `foundry` is updated frequently and occasionally contains breaking changes. This repository pins a specific version of `foundry` inside of [`versions.json`](./versions.json). -Use the command `pnpm update:foundry` at the root of the monorepo to make sure that your version of `foundry` is the same as the one currently being used in CI. +Use the command `just update-foundry` at the root of the monorepo to make sure that your version of `foundry` is the same as the one currently being used in CI. #### `direnv` @@ -89,19 +89,11 @@ Use the above command to rebuild the monorepo. Before running tests: **follow the above instructions to get everything built.** -#### Running unit tests (typescript) - -Run unit tests for all packages in parallel via: - -```bash -pnpm test -``` - -To run unit tests for a specific package: +#### Running unit tests (solidity) ```bash -cd packages/package-to-test -pnpm test +cd packages/contracts-bedrock +just test ``` #### Running unit tests (Go) @@ -125,7 +117,7 @@ To run `slither` locally, do: ```bash cd packages/contracts-bedrock pip3 install slither-analyzer -pnpm slither +just slither ``` ## Labels diff --git a/Makefile b/Makefile index 51d0d1397b..0fdfb07655 100644 --- a/Makefile +++ b/Makefile @@ -23,14 +23,6 @@ lint-go-fix: ## Lints Go code with specific linters and fixes reported issues golangci-lint run -E goimports,sqlclosecheck,bodyclose,asciicheck,misspell,errorlint --timeout 5m -e "errors.As" -e "errors.Is" ./... --fix .PHONY: lint-go-fix -build-ts: submodules ## Builds TypeScript components - if [ -f "$$NVM_DIR/nvm.sh" ]; then \ - . $$NVM_DIR/nvm.sh && nvm use; \ - fi - pnpm install:ci - pnpm build -.PHONY: build-ts - ci-builder: ## Builds the CI builder Docker image docker build -t ci-builder -f ops/docker/ci-builder/Dockerfile . .PHONY: ci-builder @@ -207,7 +199,7 @@ test-unit: ## Runs unit tests for all components make -C ./op-proposer test make -C ./op-batcher test make -C ./op-e2e test - pnpm test + (cd packages/contracts-bedrock && just test) .PHONY: test-unit # Remove the baseline-commit to generate a base reading & show all issues diff --git a/justfile b/justfile new file mode 100644 index 0000000000..36b27c7e43 --- /dev/null +++ b/justfile @@ -0,0 +1,44 @@ +issues: + ./ops/scripts/todo-checker.sh + +lint-shellcheck: + find . -type f -name '*.sh' -not -path '*/node_modules/*' -not -path './packages/contracts-bedrock/lib/*' -not -path './packages/contracts-bedrock/kout*/*' -exec sh -c 'echo \"Checking $1\"; shellcheck \"$1\"' _ {} \\; + +install-foundry: + curl -L https://foundry.paradigm.xyz | bash && just update-foundry + +update-foundry: + bash ./ops/scripts/install-foundry.sh + +check-foundry: + bash ./packages/contracts-bedrock/scripts/checks/check-foundry-install.sh + +install-kontrol: + curl -L https://kframework.org/install | bash && just update-kontrol + +update-kontrol: + kup install kontrol --version v$(jq -r .kontrol < versions.json) + +install-abigen: + go install github.com/ethereum/go-ethereum/cmd/abigen@$(jq -r .abigen < versions.json) + +print-abigen: + abigen --version | sed -e 's/[^0-9]/ /g' -e 's/^ *//g' -e 's/ *$//g' -e 's/ /./g' -e 's/^/v/' + +check-abigen: + [[ $(just print-abigen) = $(cat versions.json | jq -r '.abigen') ]] && echo '✓ abigen versions match' || (echo '✗ abigen version mismatch. Run `just upgrade:abigen` to upgrade.' && exit 1) + +upgrade-abigen: + jq '.abigen = $v' --arg v $(just print:abigen) <<<$(cat versions.json) > versions.json + +install-slither: + pip3 install slither-analyzer==$(jq -r .slither < versions.json) + +print-slither: + slither --version + +check-slither: + [[ $(just print-slither) = $(jq -r .slither < versions.json) ]] && echo '✓ slither versions match' || (echo '✗ slither version mismatch. Run `just upgrade-slither` to upgrade.' && exit 1) + +upgrade-slither: + jq '.slither = $v' --arg v $(just print-slither) <<<$(cat versions.json) > versions.json diff --git a/op-e2e/README.md b/op-e2e/README.md index 28fdb06dad..11705aa980 100644 --- a/op-e2e/README.md +++ b/op-e2e/README.md @@ -29,6 +29,6 @@ make test-http ### Troubleshooting If you encounter errors: -* ensure you have the latest version of foundry installed: `pnpm update:foundry` +* ensure you have the latest version of foundry installed: `just update-foundry` * try deleting the `packages/contracts-bedrock/forge-artifacts` directory * if the above step doesn't fix the error, try `pnpm clean` diff --git a/ops/docker/ci-builder/Dockerfile b/ops/docker/ci-builder/Dockerfile index 5946b17848..3c1956987b 100644 --- a/ops/docker/ci-builder/Dockerfile +++ b/ops/docker/ci-builder/Dockerfile @@ -92,33 +92,25 @@ COPY --from=rust-build /root/.foundry/bin/anvil /usr/local/bin/anvil COPY --from=rust-build /root/.cargo/bin/svm /usr/local/bin/svm COPY --from=rust-build /root/.cargo/bin/just /usr/local/bin/just -COPY .nvmrc .nvmrc COPY ./versions.json ./versions.json -ENV NODE_MAJOR=20 - RUN /bin/sh -c set -eux; \ apt-get update; \ apt-get install -y --no-install-recommends bash curl openssh-client git build-essential ca-certificates jq gnupg binutils-mips-linux-gnu python3 python3-pip python3-setuptools; \ mkdir -p /etc/apt/keyrings; \ - curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg; \ - echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list; \ curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg; \ chmod a+r /etc/apt/keyrings/docker.gpg; \ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null; \ apt-get update; \ - apt-get install -y nodejs docker-ce-cli; \ + apt-get install -y docker-ce-cli; \ ln -s /usr/local/go/bin/gofmt /usr/local/bin/gofmt; \ pip install capstone pyelftools; \ curl -fLSs https://raw.githubusercontent.com/CircleCI-Public/circleci-cli/master/install.sh | bash; \ apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ rm -rf /var/lib/apt/lists/*; \ - rm -rf /root/.cache/pip; \ - rm -rf /root/.cache/npm; - -RUN npm i -g pnpm && npm i -g yarn@1 && pnpm --version && yarn --version + rm -rf /root/.cache/pip; -RUN svm install 0.5.17 && \ +RUN svm install 0.8.25 && \ svm install 0.8.15 && \ svm install 0.8.19 diff --git a/package.json b/package.json deleted file mode 100644 index 0da9c83619..0000000000 --- a/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "optimism", - "version": "1.0.0", - "author": "OP Labs PBC", - "license": "MIT", - "scripts": { - "clean": "rm -rf node_modules packages/**/node_modules", - "build": "cd packages/contracts-bedrock && just build", - "test": "cd packages/contracts-bedrock && just test", - "issues": "./ops/scripts/todo-checker.sh", - "lint:shellcheck": "find . -type f -name '*.sh' -not -path '*/node_modules/*' -not -path './packages/contracts-bedrock/lib/*' -not -path './packages/contracts-bedrock/kout*/*' -exec sh -c 'echo \"Checking $1\"; shellcheck \"$1\"' _ {} \\;", - "install:foundry": "curl -L https://foundry.paradigm.xyz | bash && pnpm update:foundry", - "update:foundry": "bash ./ops/scripts/install-foundry.sh", - "check:foundry": "bash ./packages/contracts-bedrock/scripts/checks/check-foundry-install.sh", - "install:kontrol": "curl -L https://kframework.org/install | bash && pnpm update:kontrol", - "update:kontrol": "kup install kontrol --version v$(jq -r .kontrol < versions.json)", - "install:abigen": "go install github.com/ethereum/go-ethereum/cmd/abigen@$(jq -r .abigen < versions.json)", - "print:abigen": "abigen --version | sed -e 's/[^0-9]/ /g' -e 's/^ *//g' -e 's/ *$//g' -e 's/ /./g' -e 's/^/v/'", - "check:abigen": "[[ $(pnpm -s print:abigen) = $(cat versions.json | jq -r '.abigen') ]] && echo '✓ abigen versions match' || (echo '✗ abigen version mismatch. Run `pnpm upgrade:abigen` to upgrade.' && exit 1)", - "upgrade:abigen": "jq '.abigen = $v' --arg v $(pnpm -s print:abigen) <<<$(cat versions.json) > versions.json", - "install:slither": "pip3 install slither-analyzer==$(jq -r .slither < versions.json)", - "print:slither": "slither --version", - "check:slither": "[[ $(pnpm -s print:slither) = $(jq -r .slither < versions.json) ]] && echo '✓ slither versions match' || (echo '✗ slither version mismatch. Run `pnpm upgrade:slither` to upgrade.' && exit 1)", - "upgrade:slither": "jq '.slither = $v' --arg v $(pnpm -s print:slither) <<<$(cat versions.json) > versions.json" - } -} diff --git a/packages/contracts-bedrock/CONTRIBUTING.md b/packages/contracts-bedrock/CONTRIBUTING.md index ddd55464f3..02a5bc8dad 100644 --- a/packages/contracts-bedrock/CONTRIBUTING.md +++ b/packages/contracts-bedrock/CONTRIBUTING.md @@ -51,12 +51,11 @@ Enhancement suggestions are tracked as [GitHub issues](/issues). The best place to begin contributing is by looking through the issues with the `good first issue` label. These are issues that are relatively easy to implement and are a great way to get familiar with the codebase. Optimism's smart contracts are written in Solidity and we use [foundry](https://github.com/foundry-rs/foundry) as our development framework. To get started, you'll need to install several dependencies: -1. [pnpm](https://pnpm.io) 1. [just](https://github.com/casey/just) 1. Make sure to `just install` 1. [foundry](https://getfoundry.sh) 1. Foundry is built with [rust](https://www.rust-lang.org/tools/install), and this project uses a pinned version of foundry. Install the rust toolchain with `rustup`. - 1. Make sure to install the version of foundry used by `ci-builder`, defined in the `versions.json` file in the root of this repo under the `foundry` key. Once you have `foundryup` installed, there is a helper to do this: `pnpm install:foundry` + 1. Make sure to install the version of foundry used by `ci-builder`, defined in the `versions.json` file in the root of this repo under the `foundry` key. Once you have `foundryup` installed, there is a helper to do this: `just install-foundry` 1. [golang](https://golang.org/doc/install) 1. [python](https://www.python.org/downloads/) diff --git a/packages/contracts-bedrock/invariant-docs/README.md b/packages/contracts-bedrock/invariant-docs/README.md index 86f2cd4b38..f2ab1d2631 100644 --- a/packages/contracts-bedrock/invariant-docs/README.md +++ b/packages/contracts-bedrock/invariant-docs/README.md @@ -26,7 +26,7 @@ This directory contains documentation for all defined invariant tests within `co ## Usage -To auto-generate documentation for invariant tests, run `pnpm autogen:invariant-docs`. +To auto-generate documentation for invariant tests, run `just autogen-invariant-docs`. ## Documentation Standard diff --git a/packages/contracts-bedrock/scripts/checks/check-foundry-install.sh b/packages/contracts-bedrock/scripts/checks/check-foundry-install.sh index e7edc7db27..ccd337e958 100755 --- a/packages/contracts-bedrock/scripts/checks/check-foundry-install.sh +++ b/packages/contracts-bedrock/scripts/checks/check-foundry-install.sh @@ -8,7 +8,7 @@ VERSIONS_FILE="${MONOREPO_BASE}/versions.json" if ! command -v forge &> /dev/null then # shellcheck disable=SC2006 - echo "Is Foundry not installed? Consider installing via pnpm install:foundry" >&2 + echo "Is Foundry not installed? Consider installing via just install-foundry" >&2 exit 1 fi @@ -34,5 +34,5 @@ if [ "$INSTALLED_VERSION" = "$EXPECTED_VERSION" ]; then else echo "Mismatch between installed Foundry version ($INSTALLED_VERSION) and expected version ($EXPECTED_VERSION)." echo "Your version of Foundry may either not be up to date, or it could be a later version." - echo "Running pnpm update:foundry will install the expected version." + echo "Running just update-foundry will install the expected version." fi diff --git a/packages/contracts-bedrock/scripts/getting-started/versions.sh b/packages/contracts-bedrock/scripts/getting-started/versions.sh index 5ff2369dae..880bd2898d 100755 --- a/packages/contracts-bedrock/scripts/getting-started/versions.sh +++ b/packages/contracts-bedrock/scripts/getting-started/versions.sh @@ -32,7 +32,6 @@ versionFoundry() { ver_git=$(version "$(git --version)") ver_go=$(version "$(go version)") ver_node=$(version "$(node --version)") -ver_pnpm=$(version "$(pnpm --version)") ver_foundry=$(versionFoundry "$(forge --version)") ver_make=$(version "$(make --version)") ver_jq=$(version "$(jq --version)") @@ -44,7 +43,6 @@ echo "Dependency | Minimum | Actual" echo "git 2 $ver_git" echo "go 1.21 $ver_go" echo "node 20 $ver_node" -echo "pnpm 9 $ver_pnpm" echo "foundry 0.2.0 (a5efe4f) $ver_foundry" echo "make 3 $ver_make" echo "jq 1.6 $ver_jq" diff --git a/packages/contracts-bedrock/scripts/go-ffi/README.md b/packages/contracts-bedrock/scripts/go-ffi/README.md index 968c572d01..2b928f703f 100644 --- a/packages/contracts-bedrock/scripts/go-ffi/README.md +++ b/packages/contracts-bedrock/scripts/go-ffi/README.md @@ -11,7 +11,7 @@ A lightweight binary for utilities accessed via `forge`'s `ffi` cheatcode in the ## Usage -To build, run `pnpm build:go-ffi` from this directory or the `contract-bedrock` package. +To build, run `just build-go-ffi` from this directory or the `contract-bedrock` package. ### In a Forge Test diff --git a/packages/contracts-bedrock/test/kontrol/README.md b/packages/contracts-bedrock/test/kontrol/README.md index f984a8782f..32eedd4f04 100644 --- a/packages/contracts-bedrock/test/kontrol/README.md +++ b/packages/contracts-bedrock/test/kontrol/README.md @@ -52,8 +52,8 @@ The directory is structured as follows ### Installation 1. `cd` to the root of this repo. -2. Install Foundry by running `pnpm install:foundry`. This installs `foundryup`, the foundry toolchain installer, then installs the required foundry version. -3. Install Kontrol by running `pnpm install:kontrol`. This installs `kup`, the package manager for RV tools, then installs the required kontrol version. +2. Install Foundry by running `just install-foundry`. This installs `foundryup`, the foundry toolchain installer, then installs the required foundry version. +3. Install Kontrol by running `just install-kontrol`. This installs `kup`, the package manager for RV tools, then installs the required kontrol version. 4. Install Docker. ## Usage diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index cf74605d44..0000000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,3533 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: {} - - packages/contracts-bedrock: - devDependencies: - '@babel/eslint-parser': - specifier: ^7.23.10 - version: 7.25.1(@babel/core@7.25.2)(eslint@8.56.0) - '@types/node': - specifier: ^20.14.12 - version: 20.14.13 - '@typescript-eslint/eslint-plugin': - specifier: ^6.21.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0)(typescript@5.5.4) - '@typescript-eslint/parser': - specifier: ^6.21.0 - version: 6.21.0(eslint@8.56.0)(typescript@5.5.4) - doctoc: - specifier: ^2.2.0 - version: 2.2.1 - eslint: - specifier: ^8.56.0 - version: 8.56.0 - eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.0(eslint@8.56.0) - eslint-config-standard: - specifier: ^16.0.3 - version: 16.0.3(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0))(eslint-plugin-node@11.1.0(eslint@8.56.0))(eslint-plugin-promise@5.2.0(eslint@8.56.0))(eslint@8.56.0) - eslint-plugin-import: - specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0) - eslint-plugin-jsdoc: - specifier: ^48.8.3 - version: 48.10.1(eslint@8.56.0) - eslint-plugin-prefer-arrow: - specifier: ^1.2.3 - version: 1.2.3(eslint@8.56.0) - eslint-plugin-prettier: - specifier: ^4.0.0 - version: 4.2.1(eslint-config-prettier@9.1.0(eslint@8.56.0))(eslint@8.56.0)(prettier@2.8.8) - prettier: - specifier: ^2.8.0 - version: 2.8.8 - tsx: - specifier: ^4.16.2 - version: 4.16.2 - typescript: - specifier: ^5.5.4 - version: 5.5.4 - -packages: - - '@aashutoshrathi/word-wrap@1.2.6': - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.25.2': - resolution: {integrity: sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.25.2': - resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} - engines: {node: '>=6.9.0'} - - '@babel/eslint-parser@7.25.1': - resolution: {integrity: sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==} - engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} - peerDependencies: - '@babel/core': ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 - - '@babel/generator@7.25.0': - resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.25.2': - resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.24.7': - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.25.2': - resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-simple-access@7.24.7': - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.24.8': - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.24.8': - resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.25.0': - resolution: {integrity: sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==} - engines: {node: '>=6.9.0'} - - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.25.0': - resolution: {integrity: sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/template@7.25.0': - resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.25.2': - resolution: {integrity: sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.25.2': - resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} - engines: {node: '>=6.9.0'} - - '@es-joy/jsdoccomment@0.46.0': - resolution: {integrity: sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ==} - engines: {node: '>=16'} - - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.6.2': - resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@eslint/js@8.56.0': - resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@humanwhocodes/config-array@0.11.13': - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/object-schema@2.0.1': - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} - deprecated: Use @eslint/object-schema instead - - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@pkgr/core@0.1.1': - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - - '@textlint/ast-node-types@12.6.1': - resolution: {integrity: sha512-uzlJ+ZsCAyJm+lBi7j0UeBbj+Oy6w/VWoGJ3iHRHE5eZ8Z4iK66mq+PG/spupmbllLtz77OJbY89BYqgFyjXmA==} - - '@textlint/markdown-to-ast@12.6.1': - resolution: {integrity: sha512-T0HO+VrU9VbLRiEx/kH4+gwGMHNMIGkp0Pok+p0I33saOOLyhfGvwOKQgvt2qkxzQEV2L5MtGB8EnW4r5d3CqQ==} - - '@types/json-schema@7.0.12': - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} - - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - - '@types/mdast@3.0.15': - resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} - - '@types/node@20.14.13': - resolution: {integrity: sha512-+bHoGiZb8UiQ0+WEtmph2IWQCjIqg8MDZMAV+ppRRhUZnquF5mQkP/9vpSwJClEiSM/C7fZZExPzfU0vJTyp8w==} - - '@types/semver@7.5.7': - resolution: {integrity: sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==} - - '@types/unist@2.0.10': - resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} - - '@typescript-eslint/eslint-plugin@6.21.0': - resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/parser@6.21.0': - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/scope-manager@6.21.0': - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/type-utils@6.21.0': - resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/types@6.21.0': - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/typescript-estree@6.21.0': - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/utils@6.21.0': - resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - - '@typescript-eslint/visitor-keys@6.21.0': - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} - engines: {node: '>=0.4.0'} - hasBin: true - - acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} - engines: {node: '>=0.4.0'} - hasBin: true - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - anchor-markdown-header@0.6.0: - resolution: {integrity: sha512-v7HJMtE1X7wTpNFseRhxsY/pivP4uAJbidVhPT+yhz4i/vV1+qx371IXuV9V7bN6KjFtheLJxqaSm0Y/8neJTA==} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - are-docs-informative@0.0.2: - resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} - engines: {node: '>=14'} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} - - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} - - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - - array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} - - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - - bail@1.0.5: - resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - - browserslist@4.23.2: - resolution: {integrity: sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - caniuse-lite@1.0.30001644: - resolution: {integrity: sha512-YGvlOZB4QhZuiis+ETS0VXR+MExbFf4fZYYeMTEE0aTQd/RdIjkTyZjLrbYVKnHzppDvnOhritRVv+i7Go6mHw==} - - ccount@1.1.0: - resolution: {integrity: sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==} - - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - character-entities-legacy@1.1.4: - resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} - - character-entities@1.2.4: - resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} - - character-reference-invalid@1.1.4: - resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} - - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - comment-parser@1.4.1: - resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} - engines: {node: '>= 12.0.0'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - - data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} - - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - - doctoc@2.2.1: - resolution: {integrity: sha512-qNJ1gsuo7hH40vlXTVVrADm6pdg30bns/Mo7Nv1SxuXSM1bwF9b4xQ40a6EFT/L1cI+Yylbyi8MPI4G4y7XJzQ==} - hasBin: true - - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - - dom-serializer@1.4.1: - resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} - - domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - - domhandler@4.3.1: - resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} - engines: {node: '>= 4'} - - domutils@2.8.0: - resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - - electron-to-chromium@1.5.3: - resolution: {integrity: sha512-QNdYSS5i8D9axWp/6XIezRObRHqaav/ur9z1VzCDUCH1XIFOr9WQk5xmgunhsTpjjgDy3oLxO/WMOVZlpUQrlA==} - - emoji-regex@10.1.0: - resolution: {integrity: sha512-xAEnNCT3w2Tg6MA7ly6QqYJvEoY1tm9iIjJ3yMKK9JPlWuRHAMoe5iETwQnx3M9TVbFMfsrBgWKR+IsmswwNjg==} - - entities@2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - - entities@3.0.1: - resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} - engines: {node: '>=0.12'} - - es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-module-lexer@1.5.4: - resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} - - es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} - hasBin: true - - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - eslint-config-prettier@9.1.0: - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-config-standard@16.0.3: - resolution: {integrity: sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==} - peerDependencies: - eslint: ^7.12.1 - eslint-plugin-import: ^2.22.1 - eslint-plugin-node: ^11.1.0 - eslint-plugin-promise: ^4.2.1 || ^5.0.0 - - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - - eslint-module-utils@2.8.1: - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - - eslint-plugin-es@3.0.1: - resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=4.19.1' - - eslint-plugin-import@2.29.1: - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - - eslint-plugin-jsdoc@48.10.1: - resolution: {integrity: sha512-dxV7ytazLW9CdPahds07FljQ960vLQG65mUnFi8/6Pc6u6miCZNGYrnKVHrnnrcj+LikhiKAayjrUiNttzRMEg==} - engines: {node: '>=18'} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - - eslint-plugin-node@11.1.0: - resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=5.16.0' - - eslint-plugin-prefer-arrow@1.2.3: - resolution: {integrity: sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==} - peerDependencies: - eslint: '>=2.0.0' - - eslint-plugin-prettier@4.2.1: - resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} - engines: {node: '>=12.0.0'} - peerDependencies: - eslint: '>=7.28.0' - eslint-config-prettier: '*' - prettier: '>=2.0.0' - peerDependenciesMeta: - eslint-config-prettier: - optional: true - - eslint-plugin-promise@5.2.0: - resolution: {integrity: sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw==} - engines: {node: ^10.12.0 || >=12.0.0} - peerDependencies: - eslint: ^7.0.0 - - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-utils@2.1.0: - resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} - engines: {node: '>=6'} - - eslint-visitor-keys@1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} - engines: {node: '>=4'} - - eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@4.0.0: - resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint@8.56.0: - resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - - espree@10.1.0: - resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - - fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} - engines: {node: '>=8.6.0'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - - fault@1.0.4: - resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} - - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} - - flatted@3.2.2: - resolution: {integrity: sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==} - - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - - format@0.2.2: - resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} - engines: {node: '>=0.4.x'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} - - get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} - - get-tsconfig@4.7.5: - resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - - globals@13.21.0: - resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} - engines: {node: '>=8'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - htmlparser2@7.2.0: - resolution: {integrity: sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==} - - ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} - - is-alphabetical@1.0.4: - resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} - - is-alphanumerical@1.0.4: - resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} - - is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} - - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - - is-buffer@2.0.5: - resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} - engines: {node: '>=4'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.15.0: - resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} - - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - - is-decimal@1.0.4: - resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-hexadecimal@1.0.4: - resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - - is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} - - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} - - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - jsdoc-type-pratt-parser@4.0.0: - resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} - engines: {node: '>=12.0.0'} - - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - longest-streak@2.0.4: - resolution: {integrity: sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - - markdown-table@2.0.0: - resolution: {integrity: sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==} - - mdast-util-find-and-replace@1.1.1: - resolution: {integrity: sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==} - - mdast-util-footnote@0.1.7: - resolution: {integrity: sha512-QxNdO8qSxqbO2e3m09KwDKfWiLgqyCurdWTQ198NpbZ2hxntdc+VKS4fDJCmNWbAroUdYnSthu+XbZ8ovh8C3w==} - - mdast-util-from-markdown@0.8.5: - resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} - - mdast-util-frontmatter@0.2.0: - resolution: {integrity: sha512-FHKL4w4S5fdt1KjJCwB0178WJ0evnyyQr5kXTM3wrOVpytD0hrkvd+AOOjU9Td8onOejCkmZ+HQRT3CZ3coHHQ==} - - mdast-util-gfm-autolink-literal@0.1.3: - resolution: {integrity: sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==} - - mdast-util-gfm-strikethrough@0.2.3: - resolution: {integrity: sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==} - - mdast-util-gfm-table@0.1.6: - resolution: {integrity: sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==} - - mdast-util-gfm-task-list-item@0.1.6: - resolution: {integrity: sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==} - - mdast-util-gfm@0.1.2: - resolution: {integrity: sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==} - - mdast-util-to-markdown@0.6.5: - resolution: {integrity: sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==} - - mdast-util-to-string@2.0.0: - resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromark-extension-footnote@0.3.2: - resolution: {integrity: sha512-gr/BeIxbIWQoUm02cIfK7mdMZ/fbroRpLsck4kvFtjbzP4yi+OPVbnukTc/zy0i7spC2xYE/dbX1Sur8BEDJsQ==} - - micromark-extension-frontmatter@0.2.2: - resolution: {integrity: sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A==} - - micromark-extension-gfm-autolink-literal@0.5.7: - resolution: {integrity: sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==} - - micromark-extension-gfm-strikethrough@0.6.5: - resolution: {integrity: sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==} - - micromark-extension-gfm-table@0.4.3: - resolution: {integrity: sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==} - - micromark-extension-gfm-tagfilter@0.3.0: - resolution: {integrity: sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==} - - micromark-extension-gfm-task-list-item@0.3.3: - resolution: {integrity: sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==} - - micromark-extension-gfm@0.3.3: - resolution: {integrity: sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==} - - micromark@2.11.4: - resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} - - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} - - object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} - - object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} - engines: {node: '>= 0.4'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parse-entities@2.0.0: - resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} - - parse-imports@2.1.1: - resolution: {integrity: sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==} - engines: {node: '>= 18'} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} - - prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} - hasBin: true - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} - - regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - - remark-footnotes@3.0.0: - resolution: {integrity: sha512-ZssAvH9FjGYlJ/PBVKdSmfyPc3Cz4rTWgZLI4iE/SX8Nt5l3o3oEjv3wwG5VD7xOjktzdwp5coac+kJV9l4jgg==} - - remark-frontmatter@3.0.0: - resolution: {integrity: sha512-mSuDd3svCHs+2PyO29h7iijIZx4plX0fheacJcAoYAASfgzgVIcXGYSq9GFyYocFLftQs8IOmmkgtOovs6d4oA==} - - remark-gfm@1.0.0: - resolution: {integrity: sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==} - - remark-parse@9.0.0: - resolution: {integrity: sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==} - - repeat-string@1.6.1: - resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} - engines: {node: '>=0.10'} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} - - safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} - engines: {node: '>=10'} - hasBin: true - - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} - engines: {node: '>=10'} - hasBin: true - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - slashes@3.0.12: - resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} - - spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - - spdx-expression-parse@4.0.0: - resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} - - spdx-license-ids@3.0.18: - resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} - - string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - synckit@0.9.1: - resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} - engines: {node: ^14.18.0 || >=16.0.0} - - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - traverse@0.6.9: - resolution: {integrity: sha512-7bBrcF+/LQzSgFmT0X5YclVqQxtv7TDJ1f8Wj7ibBu/U6BMLeOpUxuZjV7rMc44UtKxlnMFigdhFAIszSX1DMg==} - engines: {node: '>= 0.4'} - - trough@1.0.5: - resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} - - ts-api-utils@1.0.1: - resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==} - engines: {node: '>=16.13.0'} - peerDependencies: - typescript: '>=4.2.0' - - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - - tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} - - tsx@4.16.2: - resolution: {integrity: sha512-C1uWweJDgdtX2x600HjaFaucXTilT7tgUZHbOE4+ypskZ1OP8CRCSDkCxG6Vya9EwaFIVagWwpaVAn5wzypaqQ==} - engines: {node: '>=18.0.0'} - hasBin: true - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - - typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} - - typedarray.prototype.slice@1.0.3: - resolution: {integrity: sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==} - engines: {node: '>= 0.4'} - - typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} - engines: {node: '>=14.17'} - hasBin: true - - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - - underscore@1.13.7: - resolution: {integrity: sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==} - - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - unified@9.2.2: - resolution: {integrity: sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==} - - unist-util-is@4.1.0: - resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} - - unist-util-stringify-position@2.0.3: - resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} - - unist-util-visit-parents@3.1.1: - resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} - - update-browserslist-db@1.1.0: - resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - update-section@0.3.3: - resolution: {integrity: sha512-BpRZMZpgXLuTiKeiu7kK0nIPwGdyrqrs6EDSaXtjD/aQ2T+qVo9a5hRC3HN3iJjCMxNT/VxoLGQ7E/OzE5ucnw==} - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - vfile-message@2.0.4: - resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} - - vfile@4.2.1: - resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} - - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - - which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - - zwitch@1.0.5: - resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} - -snapshots: - - '@aashutoshrathi/word-wrap@1.2.6': {} - - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - '@babel/code-frame@7.24.7': - dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.0.1 - - '@babel/compat-data@7.25.2': {} - - '@babel/core@7.25.2': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.0 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) - '@babel/helpers': 7.25.0 - '@babel/parser': 7.25.0 - '@babel/template': 7.25.0 - '@babel/traverse': 7.25.2 - '@babel/types': 7.25.2 - convert-source-map: 2.0.0 - debug: 4.3.5 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/eslint-parser@7.25.1(@babel/core@7.25.2)(eslint@8.56.0)': - dependencies: - '@babel/core': 7.25.2 - '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.56.0 - eslint-visitor-keys: 2.1.0 - semver: 6.3.1 - - '@babel/generator@7.25.0': - dependencies: - '@babel/types': 7.25.2 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - - '@babel/helper-compilation-targets@7.25.2': - dependencies: - '@babel/compat-data': 7.25.2 - '@babel/helper-validator-option': 7.24.8 - browserslist: 4.23.2 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-module-imports@7.24.7': - dependencies: - '@babel/traverse': 7.25.2 - '@babel/types': 7.25.2 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.2 - transitivePeerDependencies: - - supports-color - - '@babel/helper-simple-access@7.24.7': - dependencies: - '@babel/traverse': 7.25.2 - '@babel/types': 7.25.2 - transitivePeerDependencies: - - supports-color - - '@babel/helper-string-parser@7.24.8': {} - - '@babel/helper-validator-identifier@7.24.7': {} - - '@babel/helper-validator-option@7.24.8': {} - - '@babel/helpers@7.25.0': - dependencies: - '@babel/template': 7.25.0 - '@babel/types': 7.25.2 - - '@babel/highlight@7.24.7': - dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.1 - - '@babel/parser@7.25.0': - dependencies: - '@babel/types': 7.25.2 - - '@babel/template@7.25.0': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.25.0 - '@babel/types': 7.25.2 - - '@babel/traverse@7.25.2': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.0 - '@babel/parser': 7.25.0 - '@babel/template': 7.25.0 - '@babel/types': 7.25.2 - debug: 4.3.5 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.25.2': - dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - - '@es-joy/jsdoccomment@0.46.0': - dependencies: - comment-parser: 1.4.1 - esquery: 1.6.0 - jsdoc-type-pratt-parser: 4.0.0 - - '@esbuild/aix-ppc64@0.21.5': - optional: true - - '@esbuild/android-arm64@0.21.5': - optional: true - - '@esbuild/android-arm@0.21.5': - optional: true - - '@esbuild/android-x64@0.21.5': - optional: true - - '@esbuild/darwin-arm64@0.21.5': - optional: true - - '@esbuild/darwin-x64@0.21.5': - optional: true - - '@esbuild/freebsd-arm64@0.21.5': - optional: true - - '@esbuild/freebsd-x64@0.21.5': - optional: true - - '@esbuild/linux-arm64@0.21.5': - optional: true - - '@esbuild/linux-arm@0.21.5': - optional: true - - '@esbuild/linux-ia32@0.21.5': - optional: true - - '@esbuild/linux-loong64@0.21.5': - optional: true - - '@esbuild/linux-mips64el@0.21.5': - optional: true - - '@esbuild/linux-ppc64@0.21.5': - optional: true - - '@esbuild/linux-riscv64@0.21.5': - optional: true - - '@esbuild/linux-s390x@0.21.5': - optional: true - - '@esbuild/linux-x64@0.21.5': - optional: true - - '@esbuild/netbsd-x64@0.21.5': - optional: true - - '@esbuild/openbsd-x64@0.21.5': - optional: true - - '@esbuild/sunos-x64@0.21.5': - optional: true - - '@esbuild/win32-arm64@0.21.5': - optional: true - - '@esbuild/win32-ia32@0.21.5': - optional: true - - '@esbuild/win32-x64@0.21.5': - optional: true - - '@eslint-community/eslint-utils@4.4.0(eslint@8.56.0)': - dependencies: - eslint: 8.56.0 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.6.2': {} - - '@eslint/eslintrc@2.1.4': - dependencies: - ajv: 6.12.6 - debug: 4.3.5 - espree: 9.6.1 - globals: 13.21.0 - ignore: 5.2.4 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@8.56.0': {} - - '@humanwhocodes/config-array@0.11.13': - dependencies: - '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.5 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/object-schema@2.0.1': {} - - '@jridgewell/gen-mapping@0.3.5': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': - dependencies: - eslint-scope: 5.1.1 - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - - '@pkgr/core@0.1.1': {} - - '@textlint/ast-node-types@12.6.1': {} - - '@textlint/markdown-to-ast@12.6.1': - dependencies: - '@textlint/ast-node-types': 12.6.1 - debug: 4.3.5 - mdast-util-gfm-autolink-literal: 0.1.3 - remark-footnotes: 3.0.0 - remark-frontmatter: 3.0.0 - remark-gfm: 1.0.0 - remark-parse: 9.0.0 - traverse: 0.6.9 - unified: 9.2.2 - transitivePeerDependencies: - - supports-color - - '@types/json-schema@7.0.12': {} - - '@types/json5@0.0.29': {} - - '@types/mdast@3.0.15': - dependencies: - '@types/unist': 2.0.10 - - '@types/node@20.14.13': - dependencies: - undici-types: 5.26.5 - - '@types/semver@7.5.7': {} - - '@types/unist@2.0.10': {} - - '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0)(typescript@5.5.4)': - dependencies: - '@eslint-community/regexpp': 4.6.2 - '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.4 - eslint: 8.56.0 - graphemer: 1.4.0 - ignore: 5.2.4 - natural-compare: 1.4.0 - semver: 7.6.0 - ts-api-utils: 1.0.1(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4)': - dependencies: - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.4 - eslint: 8.56.0 - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - - '@typescript-eslint/type-utils@6.21.0(eslint@8.56.0)(typescript@5.5.4)': - dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) - '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - debug: 4.3.5 - eslint: 8.56.0 - ts-api-utils: 1.0.1(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@6.21.0': {} - - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4)': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.5 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.3 - ts-api-utils: 1.0.1(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@6.21.0(eslint@8.56.0)(typescript@5.5.4)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@types/json-schema': 7.0.12 - '@types/semver': 7.5.7 - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) - eslint: 8.56.0 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/visitor-keys@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - eslint-visitor-keys: 3.4.3 - - '@ungap/structured-clone@1.2.0': {} - - acorn-jsx@5.3.2(acorn@8.10.0): - dependencies: - acorn: 8.10.0 - - acorn-jsx@5.3.2(acorn@8.12.1): - dependencies: - acorn: 8.12.1 - - acorn@8.10.0: {} - - acorn@8.12.1: {} - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - anchor-markdown-header@0.6.0: - dependencies: - emoji-regex: 10.1.0 - - ansi-regex@5.0.1: {} - - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - are-docs-informative@0.0.2: {} - - argparse@2.0.1: {} - - array-buffer-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 - - array-includes@3.1.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - is-string: 1.0.7 - - array-union@2.1.0: {} - - array.prototype.findlastindex@1.2.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 - - array.prototype.flat@1.3.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - - array.prototype.flatmap@1.3.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - - arraybuffer.prototype.slice@1.0.3: - dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.0.0 - - bail@1.0.5: {} - - balanced-match@1.0.2: {} - - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.1: - dependencies: - balanced-match: 1.0.2 - - braces@3.0.2: - dependencies: - fill-range: 7.0.1 - - browserslist@4.23.2: - dependencies: - caniuse-lite: 1.0.30001644 - electron-to-chromium: 1.5.3 - node-releases: 2.0.18 - update-browserslist-db: 1.1.0(browserslist@4.23.2) - - call-bind@1.0.7: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 - - callsites@3.1.0: {} - - caniuse-lite@1.0.30001644: {} - - ccount@1.1.0: {} - - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - character-entities-legacy@1.1.4: {} - - character-entities@1.2.4: {} - - character-reference-invalid@1.1.4: {} - - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.3: {} - - color-name@1.1.4: {} - - comment-parser@1.4.1: {} - - concat-map@0.0.1: {} - - convert-source-map@2.0.0: {} - - cross-spawn@7.0.3: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - data-view-buffer@1.0.1: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - data-view-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - data-view-byte-offset@1.0.0: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - - debug@3.2.7: - dependencies: - ms: 2.1.2 - - debug@4.3.4: - dependencies: - ms: 2.1.2 - - debug@4.3.5: - dependencies: - ms: 2.1.2 - - deep-is@0.1.4: {} - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - gopd: 1.0.1 - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - - doctoc@2.2.1: - dependencies: - '@textlint/markdown-to-ast': 12.6.1 - anchor-markdown-header: 0.6.0 - htmlparser2: 7.2.0 - minimist: 1.2.8 - underscore: 1.13.7 - update-section: 0.3.3 - transitivePeerDependencies: - - supports-color - - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - - dom-serializer@1.4.1: - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - entities: 2.2.0 - - domelementtype@2.3.0: {} - - domhandler@4.3.1: - dependencies: - domelementtype: 2.3.0 - - domutils@2.8.0: - dependencies: - dom-serializer: 1.4.1 - domelementtype: 2.3.0 - domhandler: 4.3.1 - - electron-to-chromium@1.5.3: {} - - emoji-regex@10.1.0: {} - - entities@2.2.0: {} - - entities@3.0.1: {} - - es-abstract@1.23.3: - dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.2 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 - - es-errors@1.3.0: {} - - es-module-lexer@1.5.4: {} - - es-object-atoms@1.0.0: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.0.3: - dependencies: - get-intrinsic: 1.2.4 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-shim-unscopables@1.0.2: - dependencies: - hasown: 2.0.2 - - es-to-primitive@1.2.1: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - - esbuild@0.21.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 - - escalade@3.1.2: {} - - escape-string-regexp@1.0.5: {} - - escape-string-regexp@4.0.0: {} - - eslint-config-prettier@9.1.0(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - - eslint-config-standard@16.0.3(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0))(eslint-plugin-node@11.1.0(eslint@8.56.0))(eslint-plugin-promise@5.2.0(eslint@8.56.0))(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0) - eslint-plugin-node: 11.1.0(eslint@8.56.0) - eslint-plugin-promise: 5.2.0(eslint@8.56.0) - - eslint-import-resolver-node@0.3.9: - dependencies: - debug: 3.2.7 - is-core-module: 2.15.0 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - - eslint-plugin-es@3.0.1(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - eslint-utils: 2.1.0 - regexpp: 3.2.0 - - eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint@8.56.0): - dependencies: - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) - hasown: 2.0.2 - is-core-module: 2.15.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.0 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.5.4) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-jsdoc@48.10.1(eslint@8.56.0): - dependencies: - '@es-joy/jsdoccomment': 0.46.0 - are-docs-informative: 0.0.2 - comment-parser: 1.4.1 - debug: 4.3.5 - escape-string-regexp: 4.0.0 - eslint: 8.56.0 - espree: 10.1.0 - esquery: 1.6.0 - parse-imports: 2.1.1 - semver: 7.6.3 - spdx-expression-parse: 4.0.0 - synckit: 0.9.1 - transitivePeerDependencies: - - supports-color - - eslint-plugin-node@11.1.0(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - eslint-plugin-es: 3.0.1(eslint@8.56.0) - eslint-utils: 2.1.0 - ignore: 5.2.4 - minimatch: 3.1.2 - resolve: 1.22.8 - semver: 6.3.1 - - eslint-plugin-prefer-arrow@1.2.3(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - - eslint-plugin-prettier@4.2.1(eslint-config-prettier@9.1.0(eslint@8.56.0))(eslint@8.56.0)(prettier@2.8.8): - dependencies: - eslint: 8.56.0 - prettier: 2.8.8 - prettier-linter-helpers: 1.0.0 - optionalDependencies: - eslint-config-prettier: 9.1.0(eslint@8.56.0) - - eslint-plugin-promise@5.2.0(eslint@8.56.0): - dependencies: - eslint: 8.56.0 - - eslint-scope@5.1.1: - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - - eslint-scope@7.2.2: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-utils@2.1.0: - dependencies: - eslint-visitor-keys: 1.3.0 - - eslint-visitor-keys@1.3.0: {} - - eslint-visitor-keys@2.1.0: {} - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.0.0: {} - - eslint@8.56.0: - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@eslint-community/regexpp': 4.6.2 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.56.0 - '@humanwhocodes/config-array': 0.11.13 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.5 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.21.0 - graphemer: 1.4.0 - ignore: 5.2.4 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - - espree@10.1.0: - dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) - eslint-visitor-keys: 4.0.0 - - espree@9.6.1: - dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) - eslint-visitor-keys: 3.4.3 - - esquery@1.5.0: - dependencies: - estraverse: 5.3.0 - - esquery@1.6.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@4.3.0: {} - - estraverse@5.3.0: {} - - esutils@2.0.3: {} - - extend@3.0.2: {} - - fast-deep-equal@3.1.3: {} - - fast-diff@1.3.0: {} - - fast-glob@3.3.1: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - - fastq@1.15.0: - dependencies: - reusify: 1.0.4 - - fault@1.0.4: - dependencies: - format: 0.2.2 - - file-entry-cache@6.0.1: - dependencies: - flat-cache: 3.0.4 - - fill-range@7.0.1: - dependencies: - to-regex-range: 5.0.1 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat-cache@3.0.4: - dependencies: - flatted: 3.2.2 - rimraf: 3.0.2 - - flatted@3.2.2: {} - - for-each@0.3.3: - dependencies: - is-callable: 1.2.7 - - format@0.2.2: {} - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - function.prototype.name@1.1.6: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - functions-have-names: 1.2.3 - - functions-have-names@1.2.3: {} - - gensync@1.0.0-beta.2: {} - - get-intrinsic@1.2.4: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - - get-symbol-description@1.0.2: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - - get-tsconfig@4.7.5: - dependencies: - resolve-pkg-maps: 1.0.0 - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - globals@11.12.0: {} - - globals@13.21.0: - dependencies: - type-fest: 0.20.2 - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.0.1 - - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.1 - ignore: 5.2.4 - merge2: 1.4.1 - slash: 3.0.0 - - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.4 - - graphemer@1.4.0: {} - - has-bigints@1.0.2: {} - - has-flag@3.0.0: {} - - has-flag@4.0.0: {} - - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.0 - - has-proto@1.0.3: {} - - has-symbols@1.0.3: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.0.3 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - htmlparser2@7.2.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - domutils: 2.8.0 - entities: 3.0.1 - - ignore@5.2.4: {} - - import-fresh@3.3.0: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - imurmurhash@0.1.4: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - internal-slot@1.0.7: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.0.6 - - is-alphabetical@1.0.4: {} - - is-alphanumerical@1.0.4: - dependencies: - is-alphabetical: 1.0.4 - is-decimal: 1.0.4 - - is-array-buffer@3.0.4: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - - is-bigint@1.0.4: - dependencies: - has-bigints: 1.0.2 - - is-boolean-object@1.1.2: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - - is-buffer@2.0.5: {} - - is-callable@1.2.7: {} - - is-core-module@2.15.0: - dependencies: - hasown: 2.0.2 - - is-data-view@1.0.1: - dependencies: - is-typed-array: 1.1.13 - - is-date-object@1.0.5: - dependencies: - has-tostringtag: 1.0.2 - - is-decimal@1.0.4: {} - - is-extglob@2.1.1: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-hexadecimal@1.0.4: {} - - is-negative-zero@2.0.3: {} - - is-number-object@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - - is-number@7.0.0: {} - - is-path-inside@3.0.3: {} - - is-plain-obj@2.1.0: {} - - is-regex@1.1.4: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - - is-shared-array-buffer@1.0.3: - dependencies: - call-bind: 1.0.7 - - is-string@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - - is-symbol@1.0.4: - dependencies: - has-symbols: 1.0.3 - - is-typed-array@1.1.13: - dependencies: - which-typed-array: 1.1.15 - - is-weakref@1.0.2: - dependencies: - call-bind: 1.0.7 - - isarray@2.0.5: {} - - isexe@2.0.0: {} - - js-tokens@4.0.0: {} - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - jsdoc-type-pratt-parser@4.0.0: {} - - jsesc@2.5.2: {} - - json-schema-traverse@0.4.1: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - - json5@1.0.2: - dependencies: - minimist: 1.2.8 - - json5@2.2.3: {} - - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - lodash.merge@4.6.2: {} - - longest-streak@2.0.4: {} - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - - markdown-table@2.0.0: - dependencies: - repeat-string: 1.6.1 - - mdast-util-find-and-replace@1.1.1: - dependencies: - escape-string-regexp: 4.0.0 - unist-util-is: 4.1.0 - unist-util-visit-parents: 3.1.1 - - mdast-util-footnote@0.1.7: - dependencies: - mdast-util-to-markdown: 0.6.5 - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - mdast-util-from-markdown@0.8.5: - dependencies: - '@types/mdast': 3.0.15 - mdast-util-to-string: 2.0.0 - micromark: 2.11.4 - parse-entities: 2.0.0 - unist-util-stringify-position: 2.0.3 - transitivePeerDependencies: - - supports-color - - mdast-util-frontmatter@0.2.0: - dependencies: - micromark-extension-frontmatter: 0.2.2 - - mdast-util-gfm-autolink-literal@0.1.3: - dependencies: - ccount: 1.1.0 - mdast-util-find-and-replace: 1.1.1 - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-strikethrough@0.2.3: - dependencies: - mdast-util-to-markdown: 0.6.5 - - mdast-util-gfm-table@0.1.6: - dependencies: - markdown-table: 2.0.0 - mdast-util-to-markdown: 0.6.5 - - mdast-util-gfm-task-list-item@0.1.6: - dependencies: - mdast-util-to-markdown: 0.6.5 - - mdast-util-gfm@0.1.2: - dependencies: - mdast-util-gfm-autolink-literal: 0.1.3 - mdast-util-gfm-strikethrough: 0.2.3 - mdast-util-gfm-table: 0.1.6 - mdast-util-gfm-task-list-item: 0.1.6 - mdast-util-to-markdown: 0.6.5 - transitivePeerDependencies: - - supports-color - - mdast-util-to-markdown@0.6.5: - dependencies: - '@types/unist': 2.0.10 - longest-streak: 2.0.4 - mdast-util-to-string: 2.0.0 - parse-entities: 2.0.0 - repeat-string: 1.6.1 - zwitch: 1.0.5 - - mdast-util-to-string@2.0.0: {} - - merge2@1.4.1: {} - - micromark-extension-footnote@0.3.2: - dependencies: - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - micromark-extension-frontmatter@0.2.2: - dependencies: - fault: 1.0.4 - - micromark-extension-gfm-autolink-literal@0.5.7: - dependencies: - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - micromark-extension-gfm-strikethrough@0.6.5: - dependencies: - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - micromark-extension-gfm-table@0.4.3: - dependencies: - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - micromark-extension-gfm-tagfilter@0.3.0: {} - - micromark-extension-gfm-task-list-item@0.3.3: - dependencies: - micromark: 2.11.4 - transitivePeerDependencies: - - supports-color - - micromark-extension-gfm@0.3.3: - dependencies: - micromark: 2.11.4 - micromark-extension-gfm-autolink-literal: 0.5.7 - micromark-extension-gfm-strikethrough: 0.6.5 - micromark-extension-gfm-table: 0.4.3 - micromark-extension-gfm-tagfilter: 0.3.0 - micromark-extension-gfm-task-list-item: 0.3.3 - transitivePeerDependencies: - - supports-color - - micromark@2.11.4: - dependencies: - debug: 4.3.5 - parse-entities: 2.0.0 - transitivePeerDependencies: - - supports-color - - micromatch@4.0.5: - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - - minimatch@9.0.3: - dependencies: - brace-expansion: 2.0.1 - - minimist@1.2.8: {} - - ms@2.1.2: {} - - natural-compare@1.4.0: {} - - node-releases@2.0.18: {} - - object-inspect@1.13.2: {} - - object-keys@1.1.1: {} - - object.assign@4.1.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - - object.groupby@1.0.3: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - - object.values@1.2.0: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - optionator@0.9.3: - dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parse-entities@2.0.0: - dependencies: - character-entities: 1.2.4 - character-entities-legacy: 1.1.4 - character-reference-invalid: 1.1.4 - is-alphanumerical: 1.0.4 - is-decimal: 1.0.4 - is-hexadecimal: 1.0.4 - - parse-imports@2.1.1: - dependencies: - es-module-lexer: 1.5.4 - slashes: 3.0.12 - - path-exists@4.0.0: {} - - path-is-absolute@1.0.1: {} - - path-key@3.1.1: {} - - path-parse@1.0.7: {} - - path-type@4.0.0: {} - - picocolors@1.0.1: {} - - picomatch@2.3.1: {} - - possible-typed-array-names@1.0.0: {} - - prelude-ls@1.2.1: {} - - prettier-linter-helpers@1.0.0: - dependencies: - fast-diff: 1.3.0 - - prettier@2.8.8: {} - - punycode@2.3.1: {} - - queue-microtask@1.2.3: {} - - regexp.prototype.flags@1.5.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 - - regexpp@3.2.0: {} - - remark-footnotes@3.0.0: - dependencies: - mdast-util-footnote: 0.1.7 - micromark-extension-footnote: 0.3.2 - transitivePeerDependencies: - - supports-color - - remark-frontmatter@3.0.0: - dependencies: - mdast-util-frontmatter: 0.2.0 - micromark-extension-frontmatter: 0.2.2 - - remark-gfm@1.0.0: - dependencies: - mdast-util-gfm: 0.1.2 - micromark-extension-gfm: 0.3.3 - transitivePeerDependencies: - - supports-color - - remark-parse@9.0.0: - dependencies: - mdast-util-from-markdown: 0.8.5 - transitivePeerDependencies: - - supports-color - - repeat-string@1.6.1: {} - - resolve-from@4.0.0: {} - - resolve-pkg-maps@1.0.0: {} - - resolve@1.22.8: - dependencies: - is-core-module: 2.15.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - reusify@1.0.4: {} - - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - safe-array-concat@1.1.2: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - isarray: 2.0.5 - - safe-regex-test@1.0.3: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-regex: 1.1.4 - - semver@6.3.1: {} - - semver@7.6.0: - dependencies: - lru-cache: 6.0.0 - - semver@7.6.3: {} - - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - side-channel@1.0.6: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.2 - - slash@3.0.0: {} - - slashes@3.0.12: {} - - spdx-exceptions@2.5.0: {} - - spdx-expression-parse@4.0.0: - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.18 - - spdx-license-ids@3.0.18: {} - - string.prototype.trim@1.2.9: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - - string.prototype.trimend@1.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-bom@3.0.0: {} - - strip-json-comments@3.1.1: {} - - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - synckit@0.9.1: - dependencies: - '@pkgr/core': 0.1.1 - tslib: 2.6.3 - - text-table@0.2.0: {} - - to-fast-properties@2.0.0: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - traverse@0.6.9: - dependencies: - gopd: 1.0.1 - typedarray.prototype.slice: 1.0.3 - which-typed-array: 1.1.15 - - trough@1.0.5: {} - - ts-api-utils@1.0.1(typescript@5.5.4): - dependencies: - typescript: 5.5.4 - - tsconfig-paths@3.15.0: - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - - tslib@2.6.3: {} - - tsx@4.16.2: - dependencies: - esbuild: 0.21.5 - get-tsconfig: 4.7.5 - optionalDependencies: - fsevents: 2.3.3 - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - type-fest@0.20.2: {} - - typed-array-buffer@1.0.2: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-typed-array: 1.1.13 - - typed-array-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - - typed-array-byte-offset@1.0.2: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - - typed-array-length@1.0.6: - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 - - typedarray.prototype.slice@1.0.3: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - typed-array-buffer: 1.0.2 - typed-array-byte-offset: 1.0.2 - - typescript@5.5.4: {} - - unbox-primitive@1.0.2: - dependencies: - call-bind: 1.0.7 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - - underscore@1.13.7: {} - - undici-types@5.26.5: {} - - unified@9.2.2: - dependencies: - '@types/unist': 2.0.10 - bail: 1.0.5 - extend: 3.0.2 - is-buffer: 2.0.5 - is-plain-obj: 2.1.0 - trough: 1.0.5 - vfile: 4.2.1 - - unist-util-is@4.1.0: {} - - unist-util-stringify-position@2.0.3: - dependencies: - '@types/unist': 2.0.10 - - unist-util-visit-parents@3.1.1: - dependencies: - '@types/unist': 2.0.10 - unist-util-is: 4.1.0 - - update-browserslist-db@1.1.0(browserslist@4.23.2): - dependencies: - browserslist: 4.23.2 - escalade: 3.1.2 - picocolors: 1.0.1 - - update-section@0.3.3: {} - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - vfile-message@2.0.4: - dependencies: - '@types/unist': 2.0.10 - unist-util-stringify-position: 2.0.3 - - vfile@4.2.1: - dependencies: - '@types/unist': 2.0.10 - is-buffer: 2.0.5 - unist-util-stringify-position: 2.0.3 - vfile-message: 2.0.4 - - which-boxed-primitive@1.0.2: - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - - which-typed-array@1.1.15: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - wrappy@1.0.2: {} - - yallist@3.1.1: {} - - yallist@4.0.0: {} - - yocto-queue@0.1.0: {} - - zwitch@1.0.5: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml deleted file mode 100644 index 18ec407efc..0000000000 --- a/pnpm-workspace.yaml +++ /dev/null @@ -1,2 +0,0 @@ -packages: - - 'packages/*' From 8b636e0976cfb4c704c777f72a815ba8d0023d87 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Fri, 9 Aug 2024 11:33:26 +1000 Subject: [PATCH 15/29] Run cannon-prestate if devnet cannon prestate files are missing (#11399) * Fix devnet-up when op-program/bin is missing prestate-proof.json * Fix cannon-prestate to always run * Add prestate.json --- Makefile | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 0fdfb07655..08842b6fea 100644 --- a/Makefile +++ b/Makefile @@ -129,6 +129,12 @@ reproducible-prestate: ## Builds reproducible-prestate binary make -C ./op-program reproducible-prestate .PHONY: reproducible-prestate +# Include any files required for the devnet to build and run. This appears to be the only one that's actually needed. +DEVNET_CANNON_PRESTATE_FILES := op-program/bin/prestate-proof.json op-program/bin/prestate.json + +$(DEVNET_CANNON_PRESTATE_FILES): + make cannon-prestate + cannon-prestate: op-program cannon ## Generates prestate using cannon and op-program ./cannon/bin/cannon load-elf --path op-program/bin/op-program-client.elf --out op-program/bin/prestate.json --meta op-program/bin/meta.json ./cannon/bin/cannon run --proof-at '=0' --stop-at '=1' --input op-program/bin/prestate.json --meta op-program/bin/meta.json --proof-fmt 'op-program/bin/%d.json' --output "" @@ -152,16 +158,14 @@ nuke: clean devnet-clean ## Completely clean the project directory git clean -Xdf .PHONY: nuke -pre-devnet: submodules ## Prepares for running a local devnet +## Prepares for running a local devnet +pre-devnet: submodules $(DEVNET_CANNON_PRESTATE_FILES) @if ! [ -x "$(command -v geth)" ]; then \ make install-geth; \ fi @if ! [ -x "$(command -v eth2-testnet-genesis)" ]; then \ make install-eth2-testnet-genesis; \ fi - @if [ ! -e op-program/bin ]; then \ - make cannon-prestate; \ - fi .PHONY: pre-devnet devnet-up: pre-devnet ## Starts the local devnet From dae091f75731e90b6d4646adc4fa129645e56af1 Mon Sep 17 00:00:00 2001 From: protolambda Date: Thu, 8 Aug 2024 22:46:06 -0600 Subject: [PATCH 16/29] ci: update geth tool to v1.14.7 (#11410) * ci: update geth tool to v1.14.7 * ci: temporarily disable L1 geth version check, so L1 geth can be updated * ops-bedrock: explicit hash state.scheme on geth --- .circleci/config.yml | 6 +++--- ops-bedrock/l1-geth-entrypoint.sh | 2 ++ ops-bedrock/l2-op-geth-entrypoint.sh | 2 ++ versions.json | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index af9a7bae13..ed1d41b189 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -184,9 +184,9 @@ jobs: resource_class: xlarge steps: - checkout - - run: - name: "Check L1 geth version" - command: ./ops/scripts/geth-version-checker.sh || (echo "geth version is wrong, update ci-builder"; false) +# - run: # temporarily disabled, to update ci-builder. +# name: "Check L1 geth version" +# command: ./ops/scripts/geth-version-checker.sh || (echo "geth version is wrong, update ci-builder"; false) - install-contracts-dependencies - restore_cache: name: Restore Go modules cache diff --git a/ops-bedrock/l1-geth-entrypoint.sh b/ops-bedrock/l1-geth-entrypoint.sh index 2c515e63a9..b6cf5350df 100644 --- a/ops-bedrock/l1-geth-entrypoint.sh +++ b/ops-bedrock/l1-geth-entrypoint.sh @@ -14,6 +14,7 @@ if [ ! -d "$GETH_CHAINDATA_DIR" ]; then echo "Initializing genesis." geth --verbosity="$VERBOSITY" init \ --datadir="$GETH_DATA_DIR" \ + --state.scheme=hash \ "$GENESIS_FILE_PATH" else echo "$GETH_CHAINDATA_DIR exists." @@ -45,6 +46,7 @@ exec geth \ --authrpc.vhosts="*" \ --authrpc.jwtsecret=/config/jwt-secret.txt \ --gcmode=archive \ + --state.scheme=hash \ --metrics \ --metrics.addr=0.0.0.0 \ --metrics.port=6060 \ diff --git a/ops-bedrock/l2-op-geth-entrypoint.sh b/ops-bedrock/l2-op-geth-entrypoint.sh index 4325a75f50..f760a87f18 100644 --- a/ops-bedrock/l2-op-geth-entrypoint.sh +++ b/ops-bedrock/l2-op-geth-entrypoint.sh @@ -14,6 +14,7 @@ if [ ! -d "$GETH_CHAINDATA_DIR" ]; then echo "Initializing genesis." geth --verbosity="$VERBOSITY" init \ --datadir="$GETH_DATA_DIR" \ + --state.scheme=hash \ "$GENESIS_FILE_PATH" else echo "$GETH_CHAINDATA_DIR exists." @@ -46,6 +47,7 @@ exec geth \ --authrpc.vhosts="*" \ --authrpc.jwtsecret=/config/jwt-secret.txt \ --gcmode=archive \ + --state.scheme=hash \ --metrics \ --metrics.addr=0.0.0.0 \ --metrics.port=6060 \ diff --git a/versions.json b/versions.json index 0850a4d507..4ae8f8b5ff 100644 --- a/versions.json +++ b/versions.json @@ -1,7 +1,7 @@ { "abigen": "v1.10.25", "foundry": "626221f5ef44b4af950a08e09bd714650d9eb77d", - "geth": "v1.13.14", + "geth": "v1.14.7", "eth2_testnet_genesis": "v0.10.0", "nvm": "v20.9.0", "slither": "0.10.2", From e157ed730e331d9bb3e1c33fcca9279ec1105c7f Mon Sep 17 00:00:00 2001 From: Maurelian Date: Fri, 9 Aug 2024 12:58:23 -0400 Subject: [PATCH 17/29] Add RV reviews (#11422) * Add RV reviews * Fix naming of trust audit to match convention --- ...DepositTransaction-RuntimeVerification.pdf | Bin 0 -> 703817 bytes ...2023_12_SuperchainConfigUpgrade_Trust.pdf} | Bin docs/security-reviews/README.md | 40 ++++++++++-------- 3 files changed, 22 insertions(+), 18 deletions(-) create mode 100644 docs/security-reviews/2022_12-DepositTransaction-RuntimeVerification.pdf rename docs/security-reviews/{2023_12_Trust_SuperchainConfigUpgrade.pdf => 2023_12_SuperchainConfigUpgrade_Trust.pdf} (100%) diff --git a/docs/security-reviews/2022_12-DepositTransaction-RuntimeVerification.pdf b/docs/security-reviews/2022_12-DepositTransaction-RuntimeVerification.pdf new file mode 100644 index 0000000000000000000000000000000000000000..36d31dfb7f9c556c11c7cf64c53b53bb11a22bc6 GIT binary patch literal 703817 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 z

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

VHgZE#z-nOOyXXk^4j@G@vy`&{(PEs2{ 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%0ASCQYPHNI^h^CQ1Nt=FZYY1`b^2hN*`9TG?i`QY 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≻|S^Gwg%>mi(`k%lw0OoYH z?@mh1Z@a^}HEBHkQ+}5Mo&{N^m_qv{7J<*h%I7~L*AA?BR{7{a>uT&xB*R;2qwh)= z0H9OhNuf4R#K@7FD>_m7A$UK~DOBJ6C2Irh)i{-CQ9dd7%CJl+^@rLMD>L)9+zZH% zAepDu^LhK$!RqzKGb=_Q=Gc)M`YzTPO3J(qcSQ2^SfM?`kj3Rc5#-64F^C_usrkZ> zfB(a&3BrxRNMF=sLaX_9eGe%d(y= zd2I5NeribvpVz0p(FDN_3s+7q|5donZd%+r=!BiDJwUpL_m({MADpQK&+nr40 z@N0eGZ^$pXY?=u-PxV==%jMmMMM`V^nkXh>5_&nAJL>L+t*6$}-Hra>5^;}zKHRl7 zGb9;Fux%;AhAQ2Rll*0V0V{MFO(cw)Pz&tbNhgmR7dl_@K_pXuD@ z?x;LpfS0fu`Y-hC#X8rgx8GAU7;%%&gxbKQUp7~s%zR4$r@Yp=8csVp84O0pKl6m8 z5zsTc$n=}b`vYBD+|_eZ+(B+?0aY6i{dgU9IH3bFba4BnmM>{Q8sEMAQ>?6Ti=`D~ zv~LKZr8}F<70^|##A~9Rq4>xd-4JEv>B@o~C>r4ylCRs$=}Sp{?lu#27Bv&zFvO>? zy`s90_NT?^_2mz(5ZLoZl9_RVgK&5CxU$S>#uqAvT>`iiLnS{;zV+9JFDK^sN|SG1 z^d}XjfokH66*J|q0Sy}Vgq`i7={ZjBiFs=N*8JRtj%q9E>wWLj$G(&E1)#Vh>bTd* zqqQ5W9A~r>CW9^26T!NY^zEJ0RcuIT^LG|BWo=4^+VZtXIENWuAi<1SfE zdCuT!Xh5P=cC~{vmkfCqP_k1HOP1-I2$16#5>lHT^%pk*#b<>I+C}R3W^fTlcPYNC z4FQZQy3+&<)2D3zCpWdnw{D0TA`M5qSy^r^8maCu?H3?vX6_*cmTEwaNa@<80!S#I z5}3_#IGnX052i&ku6!}jVBmrPEdDJCZUip4lqY^P5DuJ^wafc7|E;XX1|G{{qx8GH zX?PAILX=+S1G-^~trTUsV^j;Z5LU!bZr=o}qLsWgPr5o+T36Rcr`ImkWkUG?c{|QZ zr1$;92`TP^6q0;y;Nw<*Ep%8+@Kev>5C0-m0WLHD z7CQLe7<|CUXkX8=VY@r7eX5)cMxakhJu29uz~C#9;aE7OlwR@Z$Q*3FMh(03>kV&a z$17~M>uDLltxv-DS5$m{4x2nEmq*6;H%XgjcB$f>U!LY-${M;|aB))!sZvZRA?x`V zV8}j#nOW#zRPkPu#DRhU>3-_Q^C6s!X-bEY4_`icsjxYfe&cNlh(S$Za4A{lE`R40 z?t;2@QSxd_N`C^R#GQcbeQthI8bdCxh*eykVN@R$#Dkoi~}q55d{+ zj5Wp#nmbWXp*7xL-yYsZS*p}$x*Y@f!N&0#inx}xpOEAgEaN-Zvm`IwoLq4dZ|GwB zJ=DARv7&8vPCsf)b21XS8%eZrei~@?hNTH#7(N0(_6qsZA`x9w{^E~kO}H7hp_V23 z{iUD5gIEpGc8`|(3O|bW3;nUfLlqiyu z+$DQN=8#V=w@#&fbK@-Olg{N+0F?x)?O&{jlQUU2G#Yb4UEKurprx*@{2^-NR)RP+ zQIGow1%3Jh$FpCe=wQ1rSj;wV6g^QXVpNoa?Cn;b(#c4uBNC-94`+w?a*)L z>pfcV72vvvzX7M4E!-{jHa|lI=0ekO#wnn4qNv6Eo$1JR6y?Wr5 z_%%$=zhDYzs@^c4oTtlMoA_KG^OnB=(jg$$=>E{c?FVar6iO#vDdAryjM`)CR0`Xa zjN}l~Y^YcIeB_-W{8=R1o?UohU0c%_O;!K3Bs-$%m@vlW)kmw^y&pkFUI1%z{#=yH z2A{EpZTWl66d>aobtYzemo7&AIGxxYjmUqCkhdzEHp>2+;`VRQdgzLDg$)5gA2rOL zgfKd-sCn_El&Pb|=0|c2QS>$QOV+22+lQS$G2)6dRob_}-oyuLpEeL_%Z3V2#A_mNF;aDhU1PL9hM5&2s zP7k1em28tR8b6-?`7?0)U8x!dJAQd72It8L07tU&0 zNe2rKJN$Tt{Q_db7xb#)1rKQu{Jk}UX{{Cj~Q(i_?LPGt)IoPLz4g0*OMe&7HRxD3x zI&q=}%pHK-{m>ralM?84owG^QOO>?GYRwQ1G_G!|gZ*5QhvSQjlmyC1wOStghwW#g z7_pyvF9H3=%Qh7uKE!RmMrGkVcRCq(Z%=kQ+%m& z*y@*#=ZcriZpDo%*NdcHTkS(AayK(?C>Z{6ou2JIAm~dh)d9FqAffqVRySSl(~vzW z9*j7tq97S(%yD#*TRlzVUmHQu(j0unfI;8VJFzO4O8|2UP*iD6Er#nZI2kTT%6C_J z76|8eqUDCD=;_FZtcH$+AV+WQ&}!y9B?(vQ`8@wuKnR|O4kNoB7`S8301R$kL#tgK z{Rwcb2&;G}FKimL&laal#lvhx+R!tKl~vzcCJ!c6s#?Mi{~V^3GqpWVdfyG_>90i5c)UIzasr*{<}KA>Y3uUgZ)Tm zzS!;tXqiZ|ui<7TQeyCKNw%h%2H7mW17Dl}d`E72>Xf3%kp)M}JSbr=;Rf|nzM-8IY7R(fm@E>jG@T|VKy zfW~FLc&RHc7GTuDV;E7$JC3=gSwfBCYstvMvmx+&ZdzCMUI8KqwY>wLH1St}b)W2L zZDu$C&U#UM$RRPk-ERKDL|!c?kwNZ-o2-eKP4oXBU)_CJ{3k9e}aIOLl@lwKFzZ;otJkmC{F@D;tmrpf3%IZS$gBwjn5xe+(evPz>7 z`a<#o3cjKB0iN{2gRp(!PrnAFFAZ}IGC-m*k{6p)^dhKE+$iH`;!!gV`HpJK+hV@b z1)TBP_tc45VF}2ifHno zh}l~AN`F`;b+pwj$-uKm*n4Lh)3r~K@xc%C3t?Pc(f4X*gkbvcP>1Sy1s1zGAmvL5 zo`n9gds75+jw+l{EYr-=4$g*QiiV({m!l((%SrxnE?Q3EkTOLWsH@w=2qMa;wnco4 z`Od2((rekhWXZC&TPUiVZ97%OdKkAce=(uC)j20r^+OaJ)>7{06Y3K zEKc`3N3s-$orXU6vSVdzaOa&yx-ehsVv*<8)zd+^drb#id|{>{KMMp(GL#zdF-Lp7 z@+~n;q{Q%}dv0+bPQvhY`9PI2Ris7+8cBU^XfV~_cMD^&Z)@LxQZr|n`P2!*;NiiR z?1pVn3+1BDJ92?UO~PD9{uduY`{1`mR_F35b&P!|WJO~j#)9?4&LGeVEkUL8)NLTm z`GpwBYex|So zt@AcY2&RMV&wcTrsMV}qA5cv*2kez0@wG`#vF;Ru0{o=2) z|2Vxo$y*Mljmkdls@6%R2y#ir-0#?vhh1CZAMG||dPDO=smUV*iW|!=)_;rUk-s*7 z6wR_*0PM8*7gs7x#L7!2Yf0z-(9sWp1FY{9IRo2VS$sbxj8hzS6 zWRfxAx&?2OA3eA>BspA>l_(DJvepS=O#$FI7$ytbVB;k9w9SzUZ7-v-{fQ%Eyq^gL z=eRApnfA=khtJe4j;DJMflTiayRkL+{rY6IAO9AzhJNe%#Fdm+g+L}V+wRDoHbS!L z(6Y(W4iicorH&nPCO8j{iV5GBWKEAua zk$bs{wbjp<6em{rJ-k-m+ZR5L=U0nd^KqG#9Em}6AB9qf=ss!a5YlX6pBHCH9)v25 zZyWq6MNg642{{bhf4qsKtv)7ZS;gYA|c@UvW5HaQzND;^^3nL+4)M`A~dp5>{R;s9(zigjGmFm1Quk5&Xds)gv3$`l0 zxo8r=Du??%K~w7U`9%|8PsTl12Oaxw6hYuW=`?7^arSX zFN{nnW>R6yFZy_;Y#lXA6m|49HOe*Yt zptT3la|=|A^P~ARGl|Qq3_Vo&JX-4Ua%)mNv>L3hv)^?rrb>V7EAU1*s`#`1ry*uH zE`eRi%Pn6EniJR&ZrHVCTgxxdnFyt_b$Y<#hvOP#Jc^#9qy6iYM{W!`tGBiji+)Wk z^UPe7*YEpBYuLfsw91S1_qN=F=s{vTCN-0!Kt zs&G=Oy;KxKNI1FoS#*^|E9}&`jFB*%0p)d*Y1rWoRAC%y9jkLdK1hNzP}w*hXerX5o%fZ@?FkE!rP_kH zS_^5T@A8$0=#hk5Ra8Ij6gGZZrpr;Jv~@gSX*!c~vh>L1!U-F|EZx#>=&8X|0qm#s}7=bsAsMEHnu> zyyvgFjS8Q!zZJt@lRJYt+JWG2In{3k=t9bmh}B~rX>U^VG&H(1tdJ~&k5c3!<|KcCD=gz&WpLALDx$H z44XK|OH#MjV(-(C`X|nG7tK-G?ooK*+=iYnb=HbJSo;&C@x_d!OG>xSsYnFDoA)+^ z&L4xT>as?wIGn?R9Rd&3Db&$|o2$Q+Wnb2hQ*ZH8yelm~5f(QN?^eRYjs4kt{JOK6 z`>7;KdDw&ie#mai)6R}6 z;9M|pIn*>D8v~Ug+WC)Gi-ui94J4Yx+1C5%N@g5~(H~!h)xBkPtAF0d-_3J$ORdtu zY8HNTM8uqGgt+UxhrEpFui=VN$aQ@`IYKd&rNZ~U)z0Y8L@4lx8Qua((h!(7Cna)% zA3gjURwltAK-k|+4rigg=U=E@+68HQP;0KoX zFBp*2ETG1CG+odPhtnQiGhOm|^L{16-+wk!PgVA@Uxlx5Vhh|pNqev;5gUrPIqKDm za*9O~@UCTyE!-We6lxbd&M8?1N=5l`>mLBr1L%ar3WXX}KySI|=v~Z@ym8wMQbc(H z@Jglur+6Bi8&o^}gsU(x?SV#{Fo02+>d~%w{Y90Nu)R3N>|Bd@g44<0-aWl74;RX8sf97|DuQY!nXg( z@4tq_Y8x>gFCaw4b~fsy`H$O|m!BTOEy*UeS47Ed0~7wMpx#P?wdI-!L@NQnw}oGTot>3I zongEo2;MW!aE`%3w!Jt}K3Z;!vBZQSh7kMlFTgQ=I&;^so+CAWeC%$@-hH@1vgr3V zJc{Gt=C=q>CDiphemC4xWp43RU7tbkelqO{g7C)e8O^ii$08&o1`AL}U^N=N6IbOi za7Xpe-^$mA02ox|oD^)Ks-Tyhf|7;7-uczLfsJsic?0szGv94UmG-i4F<-1aBhPT|Ji|>}hR!%)m~S zHqAORAg{R}ZD=lh7@`?unN7C-F2n>OF+z3J@$&ED?DONXPQy<>cZ26nTMXOVCWt zOXD%GBsS>nQs3bpjf($6)mMhawJhx>K!D%`cX#&*8iKpK1$TE3Zow@$4DRmk4#9)F zyE}6y+53Fw-1TF4W}4N#R(Dl*$y-&Kht$)PGQ@*FJ%)jr&mRrh;8P#FA4(CC#d+y! zMcM#NDKU(;^moB_V2EW?LDU;d|K@S>U`<$eW>0ph#rL|%3XLV*)F`oU0X%x&I>2f((znVMl1O6E#2j@1oGE;+A0AOS(P{U9_BbW(qstiejJ)pEXSb2fWOXYZg~O0;*(Wa*(uOu;p3&G zYo#C4-Pdul`-U3PS!AlKqsYk)Cl_cso(xkL2DbR+D9lat_eWVcnPoF}Ump2k>tBYN zCB#*Ob8{~CsOyAtynp-#W~#}PsZgzH8AmKH_(2{iM~4;wmyH#0l|!Gg zg<3<`?sDg)XRPmF=Ox^$YGvj~6YvJky^(slPCsvE6mO`s6b?`zW=Fe^*oHzrPY;7% z8LOD+n!4!`92b`H|J;peQr#ch_S+=IM1qxr|8wceuOC#+hZ9b-6Hw3lYRN`QhTB`E zDI2%eJRHZPjs}M{qS^;iy)lc$D(wMmQs-~4_J%G+mHb(goMWN3)qrs>SH=2*^qITc z>0M(9^D2(5Kg)8{FGzvs8LrJW{mOyU`|&KMl0lMkz|=@8JeFN2lwQ~c!8}9Jf_yu7 zNwQS=1}kKR-f`yI7j^B>x~9J$=d^xHWLH|OY37xHES+eft_T~phAVB4pgXdNACNg| z$8!CVIf5ao-htr^y>w@5DwZY1K);H2O>}{+*Ly~5H$w6<@D5Emm~pB}Eo@V9iAqJX z4;-!ixCw_0y~NojuC-`f3eFC(P$&l7;@DP^d0*cjt7h$GVC1F=WcW#n1&#UE1wNhV zggKc?MI|$+O=hB2SYhKHTF7@CmC$BbZ)@6kdfr#YgNv+Cl!B9U7#b=~=Tj`s0JKht zP^=+w2Qfx#hNq?^n!nD2wbah9q19LJCBHSx@2bB!4*&(_qk}NTs)R<#M@z2`FT-#a z!!25bJGH{T;mz_^HU2{eG zRG~CqW(vO#avS8V|C}i?ofyO#n-YmH9;~(-s!frBpA}b>z=omU(6VLNEO3}PcR*Jz z%rBr$D8+G-&Vt~d_s&(+ru2F{|0%irrKX`v)8lE&;Ur^jOWhLRhp3fAvbQ0XWYEAR?P6v~UJJ@x? zB5A)K@~qB5VLtOH%FFDfvq7y69`~o7RrvP0-hM3mLeE6X+~e@nrFqa-ZPZ<>t7!0X zgxx1+mS6@WcpA!}r7Fw$;o<@`34*@?Wfg!d1*cB=UIM;;^?%_zDMxrk3M5@>ehdx_ z3UAY~vdVZ7@v>GCMZ?K_+eB3hj98&@%bVc2eY`Rht{R$vg9(705Dbp!@ekB>aXL{E z`l1M^@bM$bA@S?*%Iq)zqhqifGn~#*4)!NV)9P%XGLI=?kv^ije^#=mwk{mS3UgCq z1dI<)&V(6buab~YObC%*RrRKZMSkBl!)Ma}W~LrGv^;mzG5#mu`rQK)*k0{Rwt?OF zP?C>f9ya9l8!vrFk%C9_V8k(djcYLEI334tzWXE6g<}JW-lUTmZwE6qIXgi9c>9}7 z8#Eww?+6d2>{aJn$LsVCRwr!X5o-gxAV5ssOg+1+H`SmCCVck*2L-?6wt$xayX9t$ zx~BBYfn>lCrk!);MT^2KU%^Le+Pdd+|T2$Egc))yx7v zb}z7EE)B3Tcdb5|NRSk1FTB$W!K;KMNx3_F6YLgz4?%_b_GUN*d#BL5T$vYHE&bzz zqX`0AgT#}ECt#_&O;Xx5l0b#Q)#&57S{Ms?L1{EKJ3afa$p|5?4u-%kd+j!78#J_)*0HGSQST{tG4}djuMA*;8HLmU^52uIQAJF;?wsEcZ!`)~=J2b$ zG>qKovE}-DZN z`hmleuiYz;Pe%DzGb`h$Zs&EB@Jj&yzMA{ng~Z0JklYE-f`HgEp-x*6iN3xdDUlZ4 z7FIFA*QsX4rO^Npe%@EqkL;$tGX)#xFUF-z5QEIt+e-oiie;-G-s|hG z?k+G+^njNA(C3v8XQ8&imc9ZF;&es$sbg()SaX4j1orN%!wVC$*Y57piCm#9NYLL? z?qs&3(%B&7$RVF<4AZysdw}U@cqfAV&Q^kL5A~cXf*`*ZNxB;c;AY1WJjz`rDa^de z1zBodhA|#AB^Br6+SxnOR^zd`5^aXXovnRLhd{EnZg!3hRerMKTq2&G z#r9khKZW!yO1I^V3-D|3w#CSKHQ@`Ww5!+8zumPPcT%z_V7C;Oo_W8jl_YV8~rM_Qgj?mivutga# zFfcrmA>}6?9%guPAbUOJ#dMcXS3tH%T z$<#X7Q1K&Xq#;MXA-^;ADOC|%>YL}oI~$rR(rR4L4@@Y#AqMjY!^t%S- z!ZvuV6I-JpqF_HEW`lZtO5Q*V4%;t!f416pKDb~5l-BzkYCkzqz4p%*QVyJSN}oQz z@ktF@_EPZrFEV%fezI#b%s+AS?a=9COQYPVgy_DK&0K8;;L7d)OheIu9CVnbiehp# zsSUDX_SKCdABo))Z#H-hWh1EP|-yuDgDF^^3iKhOCRQn!YNpQ@ejr2)%+C2@)Z);f&t z9>iCP_T2QoRYZlTzhprL*1%7woe_;%_J9cM;}ez&z*}d|TI`D)jd`xe>FQLch`Vbg;TAv$ z5Q|}4{H$vh&c>6<-?aszCazOauH9NKJq-p73edRW9)Os$|H)Q!K?Mm$%M+l?lRVk0 z#!$GclYAPaQ$V4S4#E|W0*<-GQpBoqeGdgbjG?H(BjE() z{O%Wc zFR*59%K2i1TZ-GXorC2sQZcE%bC5|R71i4F`DStN>GtR+uSH}8ysyj;n;*buiFXeq z{aZ9d&*gSjUMT%Y)eXVBSE4(x*DBX-O`-Xt|1($hU*X^)1oFoBFX{gK;luw06!MCE z_y?Q>E;r5rzU|+ZKYzYwfqjYkUqF8=jc&+6|HUxs9;lhX%AIZ&94bO$z?pN0UH<8m0f`^dE$Dh zn^h=)>23iQik{@~nFvhSws<{dm$yjERS9NbqNQ+COw1QD(MTy)AT{+r3xy&dmH3%j z>MiUeYhsZXD%X2x`@IYBNTuER)kn4_n&I_q+c0L{M(~p65a&=rpTFVfaTd`x`>kjV ze2LoYH>8N`z)KR{Hc&(S0N7xy2LncbNp5gDkMu^-S03xb4m!z>O+@c1z5RR^`jL%r z+VwLlIW6N8*3n3h@8mQ@D$dWCt;x4ao*2ac%;dXwZ;Ie)f5tliq0qTMzFtEh!^^e| zR84E;&*THoJy9~LJh;nsF_B%I5QmggbK>MjCm@1D>TD#IUQv^pIA)m(&c^S74(x{Iy4WM(e^yO6sZeZs)Dq=u#sqPqcfQrT+eoC?`D>QX;F?6iv4Ag&k zeUCZl;M=z)9P*3t@XA%4x53dH$QcabFZBLh7ZDVA=D(sKiHwG%qN}akGC7?aJ+3`U z2cHtnjFYtoGYOQ1wWewD4DOVc)=Z$R1qeYChnuQKwr4T&fS3k4zK zSWKvgExu_9!h6pZ49W@P7a9aTIZ;Yog3X_P8+NCihENR0cxWV?)Th3ddPgp=Ld@wx({V}BKNX)sa|HUnCM1KJ56a;oY{ZCT{iR}{i$lw&0_=Ev30Uqvo z3tdyjhV(E&!a0{wh;&Spr9Gj@ZCrnGIRD}P$#(~!sw}XbN&Hjqzyvt9bjoiOm`%LO zgig6YQDpEubG#?ag@q+%8Aq}Y7f3P-)a5Zhlr!#|oiNVzQ^Ov8g8wD5Lt@Xb_+D#&{ZgbH;^bzoyTSxuU9uz(UfT)VG< z#(ZzSWTx14P(v#;G`spSYR5hFK|6I5nK;gH_a~5Pc=*PnO)1RC)LY-Dg(leciD&xx zaOug7c(h5{uJtYY0#|#T8i}Rg)3?jlcCZVe&Ftzlq(VGy6Zzxa8_8EO-hmtg8*lz- z%NLgHt5X;a0BYq7DC9cKY!$J}rQ1;I3PLPZ5OhBJvClgm_|A`{s^0jU2(tyDoow-w zL-EK=w(&;OngWRz=?ZBC8jA-Wu*gMsb6wxQfP;Sd zXg1mN1-5*!XZ!Mm0KZAqsD)!PNk*)j1Q0j0xAe=*DJml%H=rCtL;(Bf1{Co`z5S`t zv>#}}oRy20vf1P8Hx9QOQ09?o{at(Pwu3qrY&Z1LAYeYo+ zU0CqA1uXj7$bjlOmku9%5A*41Ikj7aOYMJ;kS-AKpQDQRl}Pqp7B7y0*6351m0&J5 zIB80EY~8Q)7W3VS=XGBm^&|-jLlIJ)Y@Xn~m^lFOXR?&>RnTK|)Rq|?FN7$ZO+5Ae zgkC4NZoFiEKsiMPI&84rsn4Z5b!2H4Os|e5GG`&Y^#;lupT2xUQ?_T)*ZiMlu=^w^ zJ4Mq98pmWOq1rSNx zXs%6|<}>2ehua!2;<@sx$bG6&~OEK7JFV{tz+mFRaZ3N!$c13ySB$n*Lg#kkA!&G>cW5p&vEN zq-UAZuXXj61{<(MTO(BRgcMPVfhGr$Vn|NCFnM&9g)_D6QAnYR5yt)Nu z=L?kYZy;019PvB;%^>I1t-~__IA5Bf-I+U#ZG!`Tr5Y6R`U?MW+uqGMk9qJLD}W8` z;axr`Jzpb96C*gE@Z`Iw>uYIVl}WVPevn^W;3HjEyob?38%lpz9KT(Q+FMho_OO;( z(mAmRYA*)$rbpzZP8ks5l5&f>j+raNHG2uxvkN5b3Wf9%19iT={wh;sOcdXZ2nVMM zc7;ON+{j{M@4VZZ>CCh?6B{^u`tgMo4w}Tyzpeo1vF(oPu+5~QQ?aYN_g90+cEna} zL)*g_LPVH9D4u_>uJ%8Y)69);Xe@V)J8SA@k6~@IZ1fQ&`YDStY!pRI`N}mHe@7Xd zF$=a6kkN;*#wGgr%r+7epry48izb;5uf)QLfE}2#)P!-*ID~6}jQ}0_bvDRhy#$)f zEV^Zmsi5|ew}E4j<;wovKo1Vmz4cA5J`!JzDTyi!VAUXImZZ)w`N?h*cKVyj%H5MV@qIq|n91)z!U#wLi;b1xG)&9}6=$ zpvma8Ub*5PeApH^m^GiH5;(WM*{*Hb=tJTqE7h~02RcXHytw?`dW67RPZlgh@8yq@ z!!!*ot&`G8xf~8zDb!CKlz5MF-u1f&3s`5Xj>;KBqzb9uv#S*=(m5CU4 zZW)%yBvZdj`&!pc0zx*#*>OLZSN5R%)}4ZcbML5>{nbGM&em$d{JFyNF}a?b%HOAw z7b2)XJDX<<^tr>>K_oglk`W%!zlSdCr)}8%*H2q{raYhdp?cYXE%!#&5(sUspyAOl zc18_kF6*t`!|&&bjL}~V?bQ)_PU!KY@;(Q%OWpCecOFdhZyY^=asPpi$D6GUZg?$v zcOwp+$zd*Fqfq6mLwJVoLqOI7&UAdvfSH)F=k%&~?YfTBJ1&bU7IzA{H^1--+ArgC5NtOVCSc%9j{ z3WQta9@p~sVzaWPDy-nX9c_V2~6jc6( zY+6|1>#-V(v5}?T;ZbwdH<9N>KMRVS>{%LQuOK{C5nCn&{d^H<+y`~yL9H_QcpW?B z4o}K!nlQXw)>FQMkxDWVg@GO{7qGtxo;oQoxza&W6y_1fdcHsU!E!K&6Rf6PXD^1h zFj(=eNtk$%3h1^_j_!ER*n_^m3FKymIm{8{UK@WAUM~R6Kb zgdn!df|k72NqsfD>qnx#$h|0kD$?vwef+PaDU#8-LKzd zYZGOmQjzieW}0fqFaGnBRGY#M)Z?N{L7~1X60+s`{2>TxJ*PIg_QTl<-S2tj8zJrY zuoCn9H%A|+AA657+lYnU(rs^jHJ$DUk;TGs7_LrDnJ{qlYH)nZLC<@mc{;kHuj{2! zv@_PpUt-ib=iLl@43(|+!<%UQ1h2Auo^!~0%*@bJ#;Xgm!AKa#;~IRt-e@;acq7pc zY98K`z!ImKG8vOY$N9^;Z3m`h|1OJNFvQp2CNf@tb9*rjBm2v^8%+=hDMHS2K2c^< z8J(}%M|2+LjsP?Id<`t_3+vdwhJu&=UDrFX3M5TTpNN%y)udMzBZI86+XrC18C^k{ zpljAQZkUID9v|i{coOIvJ5W32fJb~1;HtiUbzkRu>QpC-+Kaz!EHu6!_Navf1Ak(c z(SkghVx%rlSNN59@0th&t$wp_!}@n!^FqX5(}v{H8oL%GZgv}WcCXHK$geVok+2Z} zp2+=B{QI0>f5C z*_RaZcftj_jHSHTEuM$XgV0Ef&Q6z~n5}7INsml1kAnNYy?|SE*au8Ed(=~qX=7R8H`=!i$ zK^|WN`(bvRDrJ+Voiv1nWu)Un~dD6 z@1hD4e=xc3LT!LCek|`JM{O~J8kFIJMkLNOytz;vy^kwze3LwZM)tHTVFj z&T5cGxln(JcXy84O)?_-Vg5!Gn#$)*Z$6LIB&$-g{VMxv_95W+rg5&$A*VP{OxVJt zs{D-tWj@CkrjSiPIMMWn*6~v@@2KXpUZ%v{Rg^O6FkL%snkN+jHv3EDVzb8jQa#3g6uWsCWi5clJ3Y@jqR|cf92GSlC^4S>;_!k=SSfKSPYzw2IJ+6x8-tNh;w@Hpdxp08U^!^IaoNiR{bRr7C*wAPZdl62R~dDl|p z?(%R(H^3Oh2|6vnO3@Y`5aN_o?Clkp=9~Y`3mlSm!061TwOo5j6Ro&p+Sq7vq0 zpYwxUW;czzn98zk9(yBhD{9hLrtcz6E9c}Y;0DwC_0pNJ!S3249(w)`mq*!D$pB(H zg|m^%VIcO`WiDSTo`Md^< zOFIHFhvF<=JZ;lSNGVKgKS|t9*-oBEfRZyh)iZ2HC1lDERI<)T(b}<5rY#RnZk4?~ zoU}FPhL%c`)7;mLV1u28QXg&(4ayjq$U1#4Z*E;`iJ*HtjGfan%Nj8A2dIo)B^vbT zRaqm?Ly#@zy|~jVX&AFK1hlEKaz0MTq>h3sTmJ}rNQeU`u6k{OQcF0?#z**s)Byai z-uqqT&j!eL4cch3&)4}hcNJ~|E={yLK@Ls|a$kX;P=smB7u_p?g3vQ9RC7delpmC` zmcG+eau)^FQGcn(PDbA8uJ5kGdBr}RQLNO5I+ie?5Tv-KhP$1}!}r9l(3nU#8by2f zQ)`xAie*W0Lvjj!5@mpsI@edVxuy-Ul5jr2ihl=J$OElC>e7I*q>ZrP);$Nx>?} zI3qqaG5@hRlihdOk_Cs zU6%EH!~LUNd|r|v&Zp%|H=l*VH@oDL(xY@G>-rAoBYa3uS(N@}om~^>Y6#WYwH*76 zG!8hSzK%vp7H)+s{H#$txr+Gx*onGsqDIPjg!8Xhq@&*1ItB{@Gr4*)T}-S&dzq3m zJT$mLkI}7kYzLL=CrqX?8doLL*Bwk-n()~KS^MuX>^cT(_5Gt{416=1@VQpzTbPCG zzreff1rjm13?Vzgw3uj`)ogLHB?>xS8u3qH8duW_(MaO!J7dj36$Dw>R$3)qQuqRB zwmNZy!h<-)DO<+XUlp6sFp#gaB})LqB%>Elci+Q9%i3jeY!noe(B)2>dPdtN#?*P= zZcs|jyn)_!#5xA-96NQRqcDK)vvS&5e|!Z+Re3;d%Rs@t2^CN2486)uhezxO)LotJ zo-ocSTb9eVcSZieI-)Ykb~ZK^b##2c6yJjsX#Z1Ho}VlRWXON^@W%J<(*{$UW}Q2_ey*A2*k7f^05 z+h=^-!>4p!K(LB-Z_oT{YZ_br=Dg7fPc#tu?+AbHd@=O<-vR%x7J`=-_%(?CdPVq| zhyDZ{{=L3OBVYL80bH}eD^gv=lzEJr?ra;;(r@KOi(0>Lrq+^(Er@~ZsQv2 zQD9GL60}}W`mrQiUuCw@r$M_SP`8Yf#(mG3$>!|DsuF2|@`whdl9TF4d1AddvYvdD zlLGdnXPHvf<^0@w43XRuSKj_tCwRiTo}nH=O#b>CJZ<)Mai+l?TOma*OE2^4sY|6k z{~hz)zhlBqHX>MKYp5@_d9(VafY1k4*|%cyB-3{V}6-dHx-EXeN4uTHIly^Jszl?~MF;&5K9y z0$xXFfh@)5(FdAZ2NTMolZUT-18vYUv@i-HusXZo{4M3qRPny`Gs!nNkIoOfbugTg z!ppNp5oKC6%%H3j5m(j2KMh>3+C~S+ z69>%xM*+X>col`Ty+7md+nYP4e}u*~^%S=b;$gTLA(Wh? zH@LXw^3m~9lh%9MSmumDGOZGB2Dz4H3i$GB@4aI7US=`72@^1U5BmkrG=+`=1#cFLQV zUAY2-Vi|FHx!(sd{ohNafcw8zxCSk^G7!euKiIc?^fqm+7Zpyj6`WKQ`ffz;Q@Gi&KWz z5QxZlX(vEpRLf*NhRc+uJQi14qLj3M8T3LIyish*1D+IuB73*VPBDrnM7@A7T<>da z);1LHjo+fV%2xS~rG6#yLW$p+Ew+1qenXDZKSEWSTNB`Rqhnf$d$0E&^WaA9AAZ@s z1A(iOC%$FKIF|Ez|2FPb4llwb9I1=3@u!%2^y0ka;AwV07nlH5)7Q4$O?4+hxC&8} z9U!|08lY*k*UxX;7U!1H+sTz_;?phUZYh`7BoPr>k2&Q(r(C<043`VV{Bd!+b%OVK zyM!NK2VA2uxv$F-#F;=R`7c=pGq)FY(<)EaFmvPTzmxDlMBNGqD{-Qn$a2ZoP|WBk z;9X}D{UskB9G94dxC8nboeHuYFEp0|8l)YJ zUI7P~aBapKPhRFaE$qyPJ;~GRzN7;8IqCo?J!Hk2#^aU9L7Jtg@>7%}|2*FLpU0Eu z73p1R&GWq5coQ{jsSJkLJThh41t~9QZqLABh2MBPT!Tp25kuMxzK5eZteTYBB3SCKY~sN&4U z&x%{tH%~YrU{d_<3h@XE3E9^Q;*cw|W^np|LpMC%o&Z8)Sc;N8_RgPy)0cr)?SBPH z;NRcuWjwoz9V^k#9{jolv&P?xpX%QeOe{VqDp)hMC5cAo_ECqP*_OfU-DB%KQi!57}+vb?_&-(*~da3uwD5R->R{9-_gm zf`nEow(?N^b2WduSyA3ler%r})Ybsu#}AGy(ERKt>1-^X@m*Ood%aY|if3c>+rbk-D>? zTAamoK|kHJHh0Y2{qdq9CSU(hb{3d)4yxW$kj2kLcv3}2H=0sGFOi)p3wK^?6etj| zmBK5Loz8tOW=Ol*{s-*=p8AKEKim4yHmLA;3fn4^G&=W7JGLQFcl;rKCJ;y(J)XDq ztMrW74Nj?!BI8Dt@5+uGH^lkzH@~F9#>MXCPq#zl3!@KH-3jQQ;n;aqUFgx}462&K zB_)9~q@8niLf|2~c)o*YH@7CSq60d#LpFv&j|v4}<%RG2pox4aJ5sVp(E8IqRPgQs z=g&z7KMn%3*}IqPzgy=&O%D&mpusPHGjVx+`^zf-{7yvlhZn)gPtXZ?xTpx8!z_YD;~e4|!IrhDvMg~Cq)QIon@Ir+r{C>by%7Feh& zg>9Bsh%wMNEtV*-bj#`KLOC|4bxRmM`6fgnlzyy|3EyTUC*pt06>X!%f+nH){X~U1 z(5kJiyHFyf33d70tVyUJ<{tD|%RT~%iSi#wbMAWoj zZA=ui%b!G0bsupC?VYT16>H$(9MHaM&tZuFQ%~;Vv;Y5!-=N|zDVd+!d60>GTXhR5 z;NwvnWVT*bdA7$XKJ1P=T9y*Ta>GIgsIiaQq-oRgKp4s)`1|~v9>57)xndj9Lw^mtNHINNP%X~$_A10~yw71DCVXnNHf2pbJ zSBW6y*2;A4z1lPIG}gE8{nh@ONKQAEEFE|pQ*B?xv!br3zSz;!JWp5_{teb+O`}w5 zTccRw<0pl)0VsO^Lb|~PImT$$9n)QQM8trg&U7rth ze5iyUF>|(EvohuKnJFsGq5T3%wb%#}`;BFkB4+w+N|Ng%7Q%FXcV=u3C5kkt1BDEZ zd&cBN1Z5Y?7aun*v^XxSok)4q7WPv|;U!ZC&sS39s`Mjh)2+~XJWWlDn(MNG-tLyg zE0JWH63X?JL|WZMdjVU+`EVFg#DCB19 zwEAZ8rW%eG@EyerS9hvrT#+rpluNaS_x6$+>@M9J|7hNRJop-vDQyn?QP`aCI?+IJ zT|CX6nr*X(kHfUeT3l!NJXk!!gWMQvcQUT7XfhA)fQ3}1T zxvc%E-c4fr;;dUV81nw=k?@1eU{w9!enh|3a7l8Blrj`4W`JT7I9&4Dkl=B#Stj7x zFtRw#ldQ;E6Ew2rCZph^@q98c{pCBVk{3y{8vVNNX&EDJ$?IndRB zk(P#_dGGABS7esk1koDYO{xD`I_7;+(JodlktgN={Sm~f@a{^stf34>a^#bxA|_W7{|n9^gQ}5 zX8nY=GFGsO5_4nqih`25`b@32?dM+E&4NjQ%uKbumwR<9Emx)0HxKuwp=kdAvBJM6 z13y^M{2wh=;3MpKvxU2_V_sg7mwTHk_^4X>6+HZ^<)eHF?=RuCe3(JYM_;muF2Fnc zZ3GpjYGi&Bt;fZZFma^b9ES+0ekT_jAuL~ugFF7HB%l{(ex1MQ<3jRD6y}t-YxZn1 z#W3on)9O-lWVoG_#=2SH(a$9hPimE`b`)C_Z5L18=nx>pa?|jziIi~*V2$hQl*qhR z&2+0+RHdh1T8=?twm62bP8G*o@atnSyeVXgYMfcx-ps361$B8-W}!eT+VQd1X){jm?MesE@{H1 z)dVZ5XT{J$Ph({KEZ=+WR1g`${ma^_pL#)E3lQ&)YTDSHy#(cVgSRiY6!EcSRCnxS z(CdsjVGH20Gch6r%kdTA63~9sT4;Sa5XVD0`#tJ)_z8tk(t$p6=@>qF7H_!P>CA{# z_ha|b!(IhEUEd)uv@O1N8%x}zFta4|n>U$tRO*(d@-K&@pZIXBiao?PE1QvV@@SVf zsQFi6wg7zSDG~r{2P)4LqJAYbDd%*%xD4dumtSk+1?taSBOtKKGJBUANl?x7xK- zFp|!IyyOx(Q?qv7mGsa#nspu`aklsy!$P+@0tOdhI$ftQu4pqJZr@8U!PGxxPl2RG zG4@Uv*Lzc!@=_SW+EC9Em-+%|6bKV}#*T$UdRh*wH-R0eS{gP8$}B!FU)0UylI9i1 zpU&(Mkh{|cIEZ9T=_FGJ7;ophn=edz}T zzk3@-Y%9kFH@Y09lMj+E?Z6Y2@51jesU+;iE!F(~=I@;a<OeG~k z4Aq{}7L%QK>MUElH`YzmMAS-R!3JN3rQ8tsdp$w?9-q4{&5VY?|AS>L8G1usY50BQ z4AQY~maQwMcGN@xU|M6)6^vQs)7`W57fN}WpSP$9L6@H#X+DD>GB1(aU1tA?C04K? zD@ySwp!&JM+<V|2E& zuj*63bl6BQebK8hkasQ&bk~pg5E3c~JMjKPL@$L$nI&Y;fvAg|^Zo&A1;sPM;0TXv zh<0LL81Dpmg{^VTgyt>=+3-elaDO`*##-tX9V-5C>$j>x;_otE%`J*8Nwm52!^$B! z*Vm*}hiXn`l07#AMt&7_Iiab>@me!%wVt^m(=VX>qfZ!uK|gY7(zqg}`#!@87Y>0P z&;&#`9D5{AojI*^sFc%q`09lQn|8)ONx=o8w#|l;b#!p;d+*iY>Z{$h4}yCaKQXZS zcTekp1O1;2abP9)%~NrU(E7+E^$%KX_-4HQXc5q*R23C+;@5!vhoXseuC0*ylL^_p zpn{o@jCqH9E#bMuMSfL01A5O$l?!?T0Ui2tg7u~$(51EtV$ul>VQN_mGvEV<4u(c= z>V@k%N<6XE1GR zl#gJLbuPwrDW5^3DHvIh#VJ%}ZP3OypclB~fgX*({hU&EVH9&45rh{Y2#g=7sVBJd zQ0){Tat5N^w$-Zc1+!gCjf{pX^{md4_okI<8Y3dB;L>d|s|V{iJ@%ZL7=J&kSCF%# zZ8l7+uTF}4f2xpsaF&u&(zi9yiz@LJef70e3{#3AUqs$vblI2rKoV0W*TC*^Xw4`S z>2#MwSsp)jSjF`RH4$FtZqBIip$%Cf@=Un|c3_@9k-g=vS+l^gLC?ED;r)Z(Q0u9B z=E!rH9LO4TIp!Y5K=Pr1`AT=I0*3Ch{0zt2c27zV?;CgE{n9|=L{#I$;vzI=G?N@x zvy@FMG5z4gt>^7!!;jMIPx~O#YnelL3gdov7F`o|iBOp>E!9YRX;oo$Est5Gai@Y- zmM{mQNwW07oYuza)8Z@B@4xu)=3QI9ex63eI9cLETAs;3zYsWkjiye4Lipj@WTx%u z^-c^mA!^L{`9P1C&0a-kdj|5os8zxqyN6Gvt=s^yu*z{vQvNoBesxC^g#tyE7C6Jo zVT$o_FPQ#!!SwGJC{l&4>$bSzWSSG{=PsFR2V_tR2@?DHp3F75_eUsp0`N4Gy{cM3 zlOQKBnTL&ju+w z>C6p8h6&bU-R9*@sa|40MTh0^ule|GLan3vqa*y|TegkiCF#*xSNEI&2{PXcR#37E zRzR)^fiitLE3JZs;6#GbR1 z^ZL8>f1iZh0b&2EEhAikcUWC0<@swVC z(z|$EEgf0sG~{$fS#zEDoC+0)BJ>ZNonI*mCjYqtP?R<9Uy%gg@ISR4xvV zy3cgCdpo&O)&d<(i@ZgXm6{-1tu42%rX6;ZO73e>Qm2NYxV4yVP2=)Pkq(P^;Jx8?$*cwLeN=j2-U zWaz*jmQ*IIxgUPK?rlw@1CG)S$I|%r6T4l<997S=a}3+tqw_HVJnHV7Sio&D-VXnyRbd zg%np$s8z53TJsscUV+sZ8Bjv~^5tojtFDP1bZ=Os9_S=3>xx*OKD-Z_K00FjwJkpJ zF@JGzp%QtYcFVkZ;mS9?K?|J6c%pkVxU7X-9inw9?6m#$REs5PtJY)J^o0~uScS;S zV^UzUe}4Lr8me3r!AmsU+d2+6+b%Ho+dPt5Ce(f8lXmr1K zU0Yrf_^z|af3clRzor6^*=N6U?GZgeDB%8d8gZ_>VtIj9DNIA@_kqrHP%e|#`)#Wg z#;{)#-~3nP21ea>nknIV6x4zCZKS9Keq+KwMn;O0<8WDR+>37mr>%iwE#-XXxhC;2 z=p#2_FZ zeEN$PMcMI%Y!+Iw879>P2*XHe<;qJ^j3}MY{YhFokY}z!9YJ=I&v17$;Ic#*nG002 z)_+^U&M%WXMXD?!!&5o56vh+b{kXME;nX-q6;0*2l$;z)I+pMd8xVo@DB%C8zKl1H z*2DE&W)Md)Kc%h2aen@Aar5o$t60PPWG@vMNmYz%WX_OL`a~nH4@11YD-->zuf4T1 z;|O9H_PCL>g%g>XXOkGh&yRy@Hkp~La9H11&<9V>0uB)*4&-WNPx*C*K7sJM>6R&& z2r|JuRepn!MmKtYBc?+7gv4nnQ_%0ju-GS?)jyUzU;aZh3Lyktg7 zOj5i_M4zTysrB75(YK$gGfj1n`SilUmNvf+f3C#|q{duq-Q>}b2{mwihX$p6|5-6O zX%HwtAkx;l5++}&k5zfPRxtm<4$a+&ID>``3Ve5+ESLPv(R(Ogrr1KJs>ADfJZeh~ z>3~rDlzxlBnaH<*1I@0ihx3G+hN~CKi??Lq|G)cy5(P}f+C>t{E#JV+-%ahfBVi;1 zjd-A}ol6aiFSW{~gL$+oo&kk8xAdWwzE5+4TBWpB^58w@yfvsCYoiulpMpN4gmU{CqnIU$-JK63H9ev{Fr#ZvLPp-6$5ZA(#iI*SPZ z(>ETf4rys^q>kQvZ@-EH%fartsVffey3G47k*lbja7=lQOf!AmqOZjyH0og|IH6Sg z@}~bTzSI_vmtHbV&tXV;^2qm zA&qK+zD#}6UaDHzM>PcHCe;190${~1EyhdRT|Ho9`eY|+!8+dgXLdijMMic~sktswGN~~k!<=X}@8XL} zc-wxI$_Wo`)_$MxCI_XQ@DMkiY??>4%-K{vT$(L>JmTIEu1*7de6kuleqf#7lA&FI z<}6m#|3JR@V}@J)Xv8Ni3jhjMS-$McTj_a#?S)FrFG0jY*s^o7$ z7P6dis-7*6ecb>AlRh0LxlB{$KlnIadV4kfBp)2JjeVnmIp@E6^RXUbd{+eelvfsa zo}tyF6gI997Rme2IvcEi$W=r9ME#IB`bU6woIefxyFJp)SmtIWkc0$iyyyiHi}Vq*!!J;LU7@S`o7cIJpQwE17j3~x3JRXO z6*}K^LxVjnpAbG(Zk$5D81T%X`=&y^T>HA2nL`^TqS)802qH7ZW7t`Cc>cO|Lv|qM zeS|ZG@kArPP}+2!snykPSQstO4oNL*r(m7G{f{O2L^c?H52JFEc-CKEiqXi=AK6Hp zhYIW!T%N1ZM2(DorY`o44KJxJATz0<(4Y2jb$j_qPNTXnGu6IEn;c%mD$P{y)U+^) z^|^EVIvJN`uKiq0H){!}G-Os5VJ;*oFt2*GHJFe!OAdL9g9m&JHq(5N^ReqCW7*e% zmEIQwvVpvL;nKI~YMIFo6g2pGr!-&6FEOyYJG=N~gQ5<^122nbG}S2&Fb1FJ+{QM+ zE}fZ7+)+PTscJ|JOmtJio0XWcId8#a@#j4A(&8ZhVITMc>oWa5&tQR4@1LwkP>`hEz#r&e~);L zeIbXkJor8SKyBnRZqM7YerL14h#;0LVfWz*s}a3q_3GjWC@gY>l~#MupTp6F4s&GV zV58`Kwfozd_vNgR-%{blIZb{wWVsyk+XcHd@;kJ}U({Ab39@pguTKiJyYMKMo{{a2 zku0wA7bs8gHF(y*=2DNky2k$%y)5XuSi97HPUK zReFQs^uAsjcU19reQ|Kkk&RN5uvvxO#K>LbODB0#7ll`Ymuk%rszF>^{n-k)1jclk zvdjp%K`~15_8%vBQJc*LU}*l{Ez$Z2gqr+3$Y;%dQVg$Sd#$=-N0U2_9i&oNFt zIme7lJ9f`xt}O9V1y056nRBGOvx411TS6QZwriQ`ivmrrhov!FP-YjA3xgLA3Rz-H z*dpH|@)LJd#PvQspKo7`-{@?cilbus`p%NCMcMs!%(w8lyfcAuhXs5=skAlLl2m6< z%T+!2lj`r`&Tzq6U^MwJT-n4^t5=otJcqoJ^dQn$16n zt>TN8`}6KFi%L->K{&$x-Cq7}qaE*{plzTZuadF<)}t~St!kJ-IrP8;|F_Tyh|IgS#0bpsvFf+~ zA!qWt+up=|1+oo;%pEmKY9_9Wg))W@-D6!p?QEa2iieKqF6-K7Q@~|7UpU=m0 zqQ?nAi%S|lnfzp(#0ARI0yx}rFE}*m)`-skNmM)Il(qPysYn~_O+qPb9t%uwSQk2uqDr4G#^PlGz&PkRQR(hmV|`pdkl9wt#yR+IpqOU96_#wt z5$oFDE58R1kR(mp=_${6(%Sd{nG&=ml>b?m#eS&y)Q$JIcUhoo%?rl8o;bQcT!vHL zt%HdV3*e_`yol9RwfZ&;1KwEdb&UYFYYoX)BANd7_0EZ|j?;6@*p!V$%s?)DEwDs| z)7|=wy^ou@hW9e6S1ncoC#q8b!7rXX{WgO*--06`WlFAWNW1TaR-^NsYccc1s-6j% zzk<7+$cW&fJK9vAC_3>i*-aE4Pa(3$EjsdMlPq9>n3!L@NO*HMZ^n`{(x$he!b!!) zhNasIq3l?R_bB~~{bL~|T3DliE{5i9BIF6IJ2wy$cD}FwJx43mGOeDF{mrZfW%NgDY2?XtY}Oz%TYs$9#~-#}?8%AO!)w2@?V3j?Aynz@W>eN9ryod> z`Z>DdD0J>EWL;UmE1PxNo}7>P z06)Kigg5P>alL4N%i712=t&@G_taVXAA) ze|iQyf3v6CK>qkNVNH`mj;Hjg%{M+6)TM-5L`)23wRe53^Ml|Jk>iGEJe?nKav5m& zI`ED4)zD_3GAk)iYVj{d(FdsO{}t_EPyeasm3R~HO94y78c{E};Bw;f(qAFK9Vha5 z_F#END8H_uyuF@NU|dEP%uJYOm5vyn_sMO{XaDtPA&5$DwOM9ksK$(r!)1Fsn2|ki9jp z{Y=M6y(Y_Zh(?Pc_r$)jeUVGPqp+@wm85KidOme0SO|sx8;8?b;dnBsRqn$$qI~tN zY|gnpsqoPr+ki?)VKFE{2cw~|q!z#DR6&2B8@sAcurlkFcT>R=<39cs@lZkFQjxpT z#o6xX2zIsEy9w`aKdnGU8q?!TOB(64rK7}z&qj$vN$dL&N&(fi%yMcJa%MG z2D+51-({0FE_`WHQfqFKr^0JQMGm6G;U}CA&N!&jGfFk@xJvZ;?dTZs9bg}K3oi}J zH}vCs2Wm?EiCW&;zBOq&L8SQg6R?tn*!6c5t~(gtxKR?QGkFb{$B^P=KThF_)xIiq z;Hus<8BA8M(D&9Zshq2C#XUuAxRk4W8{So{#py4$b510A9pxD$66gUt9eOou<7lXKpnO%IMBh>5ej2AyE0&s}aw*DrfIRP^=r#XVUfJe?Q~c5uFotTSXj zyayVF=3ZYl1)iB)J$}kr75IGv2;Kqw{zGiWe&I{;&+{rT*w%pqC@TNN6u1F`+??9W z%F60g(NEYe=i{?~!JD7l|0Tz8H}w0#Q%*o@aG4i7k|lxr8IJGyFkslG3g{srGHm~~ zaVf&D0PHb_v-=z?Dh#~2NY@wVaIp3%#`NoQu*FELBOYcSsBarCFERt-U4x{p{lE8y zU#SC{ckqFKXx4#+e+hB_`7G2#2nrCw;8t3H^)4g0TG#kMB0q2No<%>Xz0Kgqrw~Qf zgQV=%gDw89Jm0*Hd2lpLHQ^;l@4>l`8IzKtB4-w|ab|)Jf35$3_^Bda+3{w~ftg5B z+zr;fbpXa{?zyGokUp`&Dd$Tc@de&~`0uhH=DAW&G5hZw?FZDsT|+z$n@h7-TeWnY zCzPM;^kKeNX+vk^%fRtLe=(I@x@{t!bQ#&9Bsjpc=}&yFs+`(`33gE*_n@Qm{jrfZ z(C|t&e4fFM6Qi=0*?{Go=z!zOJgQH>E(iA{rGS;z0}O2-ew%d%&MhhFNYK~~*m*fB{(ZId?__t3i9=K=bcXfAsw)Is~)aCJG6uu3!77XYSX^+3ajv~n%Plj z|Jbft2cNW#@f_O9!-qCgO5EVEU&yj81^cOb^oyIzu|;}lxr5Co-UW7R!b6uNEUM?r za5LwRnu6R^3&A(29zvdMZu+V5K9hczJ>YkcoVm=Nmd>~y-uw9ZHHv3xaI9n(3}dv>ohTC`kz8BY ztxL!|-f#O`CrG860U29z$}#=(jUpSzteMG9sGjVtOH=*{>9igPrx2@v2qVKF!_1k> z{@{Ta^lV7EUs?MZtKxKEzmQ;*DrVBJ(fmW%_?;BTBlEl4Jwh4O61!M?DL=CagkG*q z^j0iTnW*^fmUR+olu5X?bpTcX0J`n2s?2Jt_gnax|(qZyDmbdo} z8c=+bN*k2HfzwcfjK;>@6$_FuEFY`WjeZcudaIMYP$uvx4*PwCo9RA_nsX5mP4K^j=%vF>uM z&)Q0RL}A^xpNGi1&m0G_4+?!1KUtFK`QBc8(oJV_`hZ(noX%EHt{|v8atycDyB)q2 zz`>x*)&6u)fMTjHV>yD{*V=^!0xd&~6v-&~BE;FZ3!yk|G(DDA>f{~g) zGyWPU>uv$sCfQ_A9fY)U`(32skdn}nTVv+38`iR|xF3mj8yldT`^XB;_-Mi_hS%Sl ztb_^Ou?b7Md#BCS%$(0^I4Gl=o(Xe6gOZ43b*Is9W!q3sbdic~l$pddmS;AkSpcG5 zNVzWxuNr-)tgXCqmyvgwgWt};5s9zt*`clh;3u774z;mLd_?(<=_DRDnN+rZvv{Gn zh-BD_L*X2tIn^uC{g_FXug()4b=$IkC%q1ss*wP!>>uMz1C>iE;zvXx?M>B9d}iB> z(W7_0eG@!F>cf-kP{C+F6TVKIPH3(NOvl4rReqh45~Yv$aQJLLE1`RA{Q6@znnw4Q zipwzLhvSncwJzW4(S7Uv^-U|lj>L@Rw`<>Y)TX~zwWkcC0L6hRoM@O36IovEiEIJ; z%kFisu{!>!K~MMU=k?b)B)+f~+Y?yvt~nkxXX4rK2b?a>CuO@Wj&6Mb5J49iVw~~R zYg1`f=)?1!%|kOf75~a~EKJ+Yf4tB2&sS)G62btm81znW!9Q*Ij7kOs#{+|A^WBxy zQnLq*cR}!p7xA}{#P0qlq&vFnDbpgmVbv_-Ae3&ThTT(*dJ5r zI9kdC*6e!m_lj;cFB*1rMM$0{!_Se+BE2;i6iQY?_)^3Gw`|)9L`3A) zJlN?Xl=@WFwwD7$V}OlF!vJ)Zz+lFx1_`#{jMh(Iu2{2pA>{f=uyS<4IoUvfk`=U$ zbt2TmVzmv}+ss~18O#x+Sx86}{Yb^|C#PoNDVR2^jyxx*TA5^rg6{*l&KCD>2zwkdB;FTWkurv&>xtf`NQYS*%9N#rG%G6Tr?wr?ummC zOJnzowwh~Nc;#%1LA)KaPOqsvRhHFzk_=}vcekfI22mb>BdPh3!xcPA{F@H>@8phk z6yndkWd2KTk>>^NVnB+KyZ9VYiB57$rM=rBP#YWQ5v5qVSJOiW09#?M`JV}G28~%= z8ioF+X-Vv#P$L-Aw1y2SbvxbRIE9uVBnBD9ULSddAMt#ymq)}=s zcW1-)JP$&MCOXanq22HgEdE95Rtu~7HUiBf)3?PO>nd3X6_p3nG{83$NVOJ+$9Oit zwQ4SdC^I+>&_t5?W!1{XsSx^**_)TAj&r6RP4d=yctXqg#LC^aR`M5V<%ABRM+&x1 zW%c@2BS#1eD3R8R|!Q5}MEDbavHcWAlr zlFI$4*P_n(EX#-GQ#MxhN7S^=1f;3FGN1X_sTOYz-5Zw=EU6+SZi(v_ZggqC=m5w2 zW)|O8WZTV=%)wm0%WI2N2^$J)P|*c!64Qbc+Ot3XDh;TGx{!R+&QkgT6UGn57}B>336c+t(K1B9t%##!R}<f^)(D(6b%>|Rda%N7SMJ#{N3e@;b3X{~C2`8cAu-8QV{=D2C_9!ioE^H43# z&(THnzN{zpaDeHBsus;){NJq z0L4ck?(ZVQ%4b~|UHrrVSaT2bq7=0(M&HZLF*=~OWAl#%-hN_@_>u5pJchK|M4wO0 zF3=bsIj?af2FPLeW|tgr$qKW(1d`z*6iI`503d!FGS;ejzt9NN1ovRfC1$Q7*;PL0 zKATK`z~*|@uW-hoe(Y_j6jW&j$0eh2I0|dy`)>8(XL#8i6P^A++#!NuwO^-G%w-zW z==$#^WsC{9!_TqCCnmUDE?cgazXJK5<>!Wqs-W{(P2LyaK`F-a4v(7^pJmVy_eDdU zpjE&a5nggGk)crV>3QdP_i0ycXzr?7ho}|vBN4}JD6qP33k~w-<>*US?2UX9RL$A! z(PF5p0j}`}Sk?if_75jrE^$ZPS66sL+((&NQD@Kx>XOi#>yuE4-|;K`8|_7^1P=5u z{aA=^W9{UlpmLR%=;)CHDKSiSQ6aKIT|dUS7QWmrI+u1tMoKpk6K*a=-Y4yS#36UKu zwK^C(Ih=Df1DzB8nA&3*b4VsHhM& zz@I$nO}V7aS>Pt%XI@EKW1*FlkVvJXqRd+Kzr4H3m*rN9G&uB}@>pNHWcCAG|+_*4|JOjRD z;yu-UlAcy;73i#&x~I!{d4w#Sk{9C+&bEB0h!1@F`{Nz8DN>gN0Zi5MMGl-l^_KIB z1_~=K0!n`Z&{tnM5Zx+0B2vsE@~_jbIG!KDoPHBW@#7yH*pfMWvprgQJq2TML;qM? z%}R4R*nP*>AQJtKFy<2JGbihbsy&5{8kby;iJ%whAZ^^761%1x{s78^v9wgz4b(!&`jXT*5-_V z^OsA@7x6@7Ygai+hbf*H0K%tAW#H_jTDm?4kdr;0r^?Vf0qoKv6+D}tdDTG`SJCSF zIkvv_2|rzqKktP!1fq|$)DEeL`uOV2T6;ciSe9&;Kws;iqZ+F7){Ac83eXqCnKBbjJHe*j4L z3<>^kD>$8=A*&>p8ytjg~{OG+x_OvLkvka)+k;W&$8SM8@haf z*9bW+)%4uI?)fGAZxxSUm_{go5(<4<835oTA)4?4hl??EdDY;36jAK*!r2*e1Pd|9 z`8MFjERpF`Z-o2CwS z{vw)Dnx|0Zqnj=kANJ6p6YRV#<93#QKz^=&emOh#+h=wn44=nlu}{sfrYJ8RK7*d^ zsyBH02>iOg-sS4t9tAS#TRkfxz93Qr1Y&LtkOSj+%P%~9is*qD^*Hf#-HLc_QGSSd_Nn*h(D?mQnGr&mtux$Ber zIxJ@+wQC(Q;K_ch>U=AV!) z43Qx(XlE&Lv4z!;pKOJKg)=+*yr6Z=6~pE`kx{>w_>Lc6K^6N#%?iDMVKSsck9J3+!&Cp{n~;!ufa9^~DyU1V1>HXPSLi zqXX?(J1wgk$c6s&9^gu;jJdNo%a0e4xk;c-8qmd27HJf?8>VU?*#cHhIufu_Z(~Ya zYz?|i`}cwIvr7eRI4gTZsG2N8)F-WwiU!7K!57yMH#?jLGrkIWv3U7hMymo-b*xgN zG&(8f1htg29I{-to@!R*h`-Mc$yZLE$QNBf5$@+B?<{Lbd4A92Bm!ksUG7~$%IIS2 zoo7_i$zYvh%q4c0?=bZJrfmDIK5h}jGyZqI&XytP{n?*Szv?WFA6`t4=AtfLnUAr%Ph^r$YJ#DA z4=P$S__q)ROjFY&hvwv}eobyi!b~bF9M%At$0*r}9uY`dfrB$~&N2E1@aUMTS<|0I zCzW}Y_dxy8ajY+H>SJ-kx)$Y~=d>F1SIVc}J?yXK{8s$KhALitNsQOGj9=w*@S2AT zFM1T-t=7<2d_=no)6S%J%wQIv8H{!8v5~L9({&9ll>!3TB%v8 z2u&H8jXxaozOEK%)%VwADpCQ#HGB{T5*4nB#h^fR6NgcXnWjI0tX)LxER7*-mZ4Yg zZ8#SPzqwl|#h!I|`PcA~*t0AS$Mws!@$ixKE z7I0;KRxkUchZ1oB5z}*Ncn;ri$pFf(>$9>Ui;G6-&v9)wMO3mO8JwpU&wi`{`_p0i zK(yZjlMx`TA|}oREYVgg%teA&Jq>lq;Spjf8>{vW*HJUDa~S<|y*?0n6x<|XXvLl; zzq*M6Rr44GH!L1m|LP6wLjlXm57yinfJ+@Dtj0huyyU=e1GrB&GA`x;6z`Fx5``92 z0p=vzL^Q|b4Wcusgz_>_mic?e2zi%2U@;RvcvK55l1;z^=6Sh*RK-A8GmbtI`j==b zBC6B^a!~_2)a%(vu&}(M9Ch?Rctkv9r293@ z;utEo733EGn1%WA&Mk|KWzjMIMTfuB7GT=0h=zLHqA^A8We8u-C^pJuv6o3Kq=c2? zX2V3SG4~;x?^C=7pmpb5Zpuh1h|OK>SKdfW=T&SNSwy@M(XYcf)nox*S9R zxEdH~IL0~QuD~Jiz7hBgY;1T1NTUHB+y^zyQLmNE0x{s2NGx!)MnQ9pFZZ3=(0pyh zk(eAnp8`|{D3&e2@}h}(#Xsn)>YLkrOPgS?=|lT`rnOzPpxkn+bKqX*fy$Gm7=|v4 zL*ZkicpS47P&KFPSg8=a1A~4nm7b609o?UEI!`&nbb(j{t7_kB)*t1q>Uz0XnmD6? zM*DxH4>7XoPqKF&-1|WI2;=a!lQ5*)b$!9R{r5A{zdGiQ3s9iWv`5-UlFMc1f4aZ> z?rk@Ox*UCL+FAX{4g$}X#Ws)?-RiX`2aJ+sBnUbYgN#5n`k9XfmR59&Ok}2KLz`bX z$fKcr08dZh`Sp&vM?yQwGeocaS3ws`fOIu@UG5A(vjSHf>4Dzpb#zviQ%QLNuFL(2 z@)IqzBMds3vzG6=hHBSq9SDf?`Q+9BMxHKY0#7A3yu%vHB>mb9DeTy|AJ7*sbqoMU zBkT4NOHo2U7X#dzmdx)|kTB@{Y}6L~%7C0e9)%s=DITbrh+DX#ntgnWcd> z#B;)x!+nrki^)W-v_7A+yxp%k82~awfw&%Z(|CZYLl}Ui0x5R|Cblx()UVZb&KLI|LMiK2eEYjcyU!Z#d0AF{Rk-Mu~=_tkv-H(ZBl!v>2 zmxbKyQB8P+0&hs`eFNQ1l1rR`imWI-w~?uGVgJp8%*b9Ia$uL z_Xq#5Oqk^LxH-s=xWST^9Z-hZsnN?0zw~x3gwJcqbF>|t7x$=yoI+C@@c;}8fuk1Q z;^jR(j=Zu7Wm*y6A2hiU4RJXAZJEV=al3_w9 zx|IWfn`QlJSZ%TH73Y_e0@Ka0ZBIu`RLrn1^i2X{+Q5nmLz%>lFbdsDL{(6}ZX zc65N+-wh<-sw64gAWHW1UVbc2viaPu0p-50sP;5lELd2dlnES@QT=8s>H=DvT>td; z$-K0i_neCcZGvdC&DvPk;;!hE!nU>cV70-O6Yq}3>ix!!Sc{cm(E0^b$>XR)e3$2Z z>n{;?7iU4KIM+f1&t*n4u)ks+k7@I~>%X_3ohWE)w117$_=DPv4*JF?w37jg z7r`_BfCP7_Ap!&T=VsJu}^l2g|8GK(%j6 z->=D`cc10k>Zt$ppmNMiPyY6_$116k5rjVT3nwGHNjFLmHNPqX7HK$mf2>vEZFL@1 zeg%j0xOfNBUpQh+n`7{8RT2myS0I${|A z6da)e%yKf8)2H>Rv9$JHhqVIg*}{N2d`v>GbAWV3jjU30ZOb~FRv3@rjGjB zAnsmhMt^}5h)|D>NQ99j0I1fg9nHK%lG4-luzkoaI?G;tMIDj@ z(u+vvS`APubzocN#3M{)h(YPzFx~LtqFxqh+`t%3;5^3MeP!{9g%R69I%0c+n?X>AL)1b93Cm@DtIUaG{(g_Cx1%MdbD=5 z35ZJXpjCle7*uRu#Z$EGaWn#34~$-c0yp-}T+*DdI8$39nD4o{OAVKRP`;V#+HBnE z33Mk}SprVjz&z+t`$Jhkjwh$iriIt;anDmi6G_;Fc6NsDQoRoVMAjZORTP%%_?MnREvMqIBikrIXG%TUqC~CS5}- zQF2Zc&W<5PH7F1VuBq>-xlK!LP0-ElbmiNcpMJZ~bN#g>CiVS4-A5f{~k#BO*_ zIk|U5KAZlh;~J5a%tw$V45q+9uW$x!aNEB|k4=OkNvOQE9R{X6@uQVt)yHe9l_HM^ z%FSF~x_;XwOcog!@PYW4a1rpimFFVgEQePk;yVlm@l%}9PNCX}l-q+8b4}Lkb zl2iO9GvJN83iW8;`KZ5eLh8b`?-jK07$$ImGxQG8P<8D>BM{;e=<-LYVuK@Y! zXrGpfB_{2W*zjc>FSM^P>v5|hRXTYNWiKx;67*26?7Zgty)wvGM8u(+`WWqLh`!&l z{$sf1TU10|A0SZf__JeTQVvA93jKbzfrN(JeBT1TkPu&>)3{LOU?6Td*2;E|BO6s2 z7_*$M7z!=2cFs!QbFKs$6@=GZitPc$KR{xHsgia{MDw~t?&XmkSP&TH;q$4wCgigC zSPxUJ&@!h}Z|hnfT;eSkWoNr?od6?!ILo2ae^^9WJ{9)zUoZlMi?s_PTv4M z+da*q$}T+Rw>-~o0G73M=5}xsTE4DY=hcsb^#lD2KuzqiawKzUK7eL01tcV&+)jdR zY!vJ4^z5P1WNvx5#Fkv#e8}36_F%^ldH@1z7JWXuIWC$50O5sfk!<}HeH!rq5W+IQ z;mAeoVYKLE#f65>*hiuu+>>aCAU+yCGb>*Il7D9N{1veq!_(EX+V0KAumBs6torNE z8^BQrFTztP#Ch&w75s^sn&2rCApgL?$7sz=sdTRL zy5^78oTU1`i@y}Q2qT66JgU2NY^P9$Awn-px%VZWt{t%Q)}c5*EUn(q`*w9Ol$jWu zT%POG^B)s}k&GF}XaG^RvjB2RHOVGm1Ld)-VK8s&Z(W`SmP>oFe?Om61>s7=l z^qfC3!2M`-Y2~E0D9+_Vx0~{$UoRVDcS6+;%pG(t33F(dvRqU})}9H`SlGBgpvapd z82X|T(h=+hHZ1I?$I#TnpqqbB%Zo;HK(vmHie24~=N*r&kg)WilLHWN1B3bnGQ3jl zNq3J~2oT9>N3F=swgvm&?arEK<$ewCOo(pR5V!HMEOQNPg6L)0(tm%cS7_`%eb|)` z_nDsmvB5CP(+@<@$8E;2s2&Z=8oH8D?NgpX`HxJM7|f$;9+@j6EXD?CFXcmn3X{}9b360h1n z(i3kP8)voCw>Gx$cT=}?=Tw$cL@Hp&fmY!g@49L|+PebLL)y1g;T>;nTN;a+S8-tE ztzl%AxRdJ`#KX`;*zB`HF}ltdCHYx>D&>;ZwN1fG;Ud7GC0bcAmv53LOw2s`!1CR?o)>6 z3@7R7P-!6#wsKW2?%09E@E=8#5_)$}*DR^f>cd0g`J7T>+soT5NWdpK9__N9 zLiIIkz!o3faesT9W(8%TlTOfz!Zk%>mR#9>Q>&PpE{?hAG^6hz22yH5VWZe1aqO(h zWfh7%Y_S6)!d2h;gwdc$C$7ZPeD^aj!^ang@;Ij`0JW*`)u}=)1tyt-`5nXJyuK)x z_7QzYLXM6`>Zd_3elM$AMGX{TZOX|jYLxBrD~w5Y_jYcJ*rIuc%UNRvc<=@X+zF0R zJR|xpQ2e*P>I!ZZv9tX`-=i`VmsWE!0qBcj0O0yl^<_6_|AK!tJ0rZlKWAyF+0XTQ zzb7$tG3y|fQGnCG;Md!^#=6>isU`h1bxG9zA@T%kuc(gt zL}nqlxxSy_|Bk=DKOWzel0iXMdIOjeeqwjG&xGAhmc8@ok1r@`7*M=-+;k(IwNI9T@;(VP_{YvgHhc`;> zL&NDFXXld6*9H1C%*n*~BWodNZL>>h!-lOKPCKz%a-TZT?=F|BSO>tmYhhjO>AjZqlHF!6S&YmE{_vI4WucHoIeLu#>7mL$&H z;vg2s*|LdyR4j#0?Dr=tPKZh6*0;AECgicRnfL{W)SvYMFz{Q0BYTJNr)yh2oBybA z{j-i|F=AT51XZ5Onl1rjqt%r66`zm8I`R6}mU4ny9#lEH8!1U-e>G-mnnw!(Vf5r{nO*ut)yz~9_kk%CK)`13e@BgAmBP*Jx;Y zdPW8U0SiRTS5f}tJ5Z5 zRX-pI^qPS8PE`dIUitiUxVQD>@?tWBy8hA~-?@T3zLz+mS#08r;nFe~aqOoQ zpH-Oc=SYMn!}b#TjSlLq43ow^6yG$=h#z-inh`g z5!!ne%wXk~;|H3RA6sH`SJ2^kG8|lm=Hg*Rplsts5y6>Ry?u+q@R6rxkET?HGKU?^ z8Hcr{``cJI(RK)oAoFvK?A#gi7*Yu#GyiP#BloADTWLnqW7EsiIwX4oy%yD4!LO{% zewJUavx#Q=_{+xUY+KkwVS`Vf7@7-m8+tw%Z3%P@ZW1@?R-^qu&)N7XVFcaTF%s@+ zinB4?`^IsVN+L49UXLXde@*t1R79ce`bVRQ@&?j|3@)*2`~`U)%2708VCK#%vJf6V z@x_iJE&hmFdQq7I-OCuQLH)4kbVS63S3Tob5pglNHKB7SZD*&yx^r`!B!H&y6#s)z zWU1u*hUL+p4C`Eb2lb2RWiFNm!6QEtTsDp8J)B8P>33vE2Ni{{206cYwfqjFteIgd zY{-ZD78kK|=w-0YN9rk`{iVvE*iNPeIkHBJO#c{6CsO<&r=y(d^rMh6B1=)8JI$`quv@wg@A;ObJ=9S8we?2wCpAhf+Maq(d ziA--Hk5dyS(;L`bDpp;K^m|p5gvH&f-(-BHx~tJir3D?958xsaT};zk%v8?SXGi#E zb!-c|v|8$9aFsj0(KlzhsiIa<}+}S}JNQeVFN|%DA+lox4p%6-zMf_iyt{s6>=qgx9-~kKSruxa{*Zi0=Lw zQ^`%Hl_Jt7o)>{D=Cy;3Vg$DbY*ZUn_MkTtag`uWrj{?H_bIjEB~B+(2C8;ON&_(w zi^JKDTx9n*Q4VXb}d}p*~nME0_DlZi+=cEL0Hm9sH?aHSbHHydMD@)fFLgnWjbJshseoNNLdV zi_C5z2k#CD-@-D4v)STs>a9)qmk7BkEJ+8#obA>6+uQaX%tVF;dchG%r<0*i=cVyB zP%(B-Ylat}3M|+hiig6}>LWI1Ub+x!N`0h#IZOz>?tow~-f!~8D3#GTE2JC^^GPLu zRyQ_(@cb}ywTy4+S{yUu z-^wBGM-G11linGzcS&F#ZLxC$He8DXGrm&eG6OejZ>z+0_7iKHr6`Z~Xr8Btv^Bsc zs9$%#$JS~n2`zFl?^?^DZDhRl7dJTGNm*74LExH*wLC%smBg{-YrB|Q<3R>hDep?o zev2OaXm@XqM2-L2Sh=2N6Vrdqw+v4H=SG=w0+5he+kirLfN*H1&5xI~M85Mqh4YEf z9-+uTDeYRH);BKy+Iwj>dQ$wlt2U*5Jw(~scauitDZAP)x1W$!R46C+_zK017O>Mqm^}^skBl3(}6EiH6!} zI|}D_<3HFAFJ2RVJqU=4>!qKaQ9OepIo9F61#5O&u6|KhJ-dB|nWTTJVFIbeH-$-0 zxheuxKwp8u;^t%?F8pf>e#oF)zQ*!fbmc4a+pEgr0f4HP{BYsG=f_}nY0k1lGqkC& z4-m1oulu8K_J|;2P=Wy+ohZ`1)3e|g#3JvG@WRMI+Deec5_I$fq|Z$HCLjKH6!Uir z6I?l5m|;pR?9~^zXM$qG_SG1F`K3>dLz_u+$=eTYir{OQ0hPqq*!EgC#<{3&c3^0g ze^idT%1)5s(OSNY%po+nl0rvF3zcev>?srss0sP>HD#qtkec& zU+S1G_$)&-w-(G3qR1`<0XSVBlm0S>vdYElj)NPAd*Lx|&e1@Y+&k@ci60RWg>&LX zc2*L}_4fNIm(d-4UVi>>RJo^^i@mGS5P%a{om*W zoRj{Qskyem3{n2zTg6A!f=-eT^DQiXKa|81dJ$O_{Yu^E@|0Il(2X$q3-WP^i2$=u(X#Wtu)o}tUhjD~v-k7VtfE9`xxe30x@v0t_k5nL|r2K*)F%GD1NlP^J zxC@fh?ktRi1&?4d?iDOAa2vw5g8xt_9$@gbe>d#wQ2Im~El01p{g-&(g(bL5cmRWM z7h4^!?!9N^b;FPSf_vGZY4g3-ChBJwKl|1ds6x1ak+~N+OEu12QgwQtdmWHTZ^(%I z9FZ2L>uRZ$`oF09%CI=LCd>!{5+Jw)O>lSD;10n(xO;F9?hqij1$TG%po6=+yL)dZ z_ug-J`v)-3^f2A0>y*4z^;WunLg;Wv_C|8TGJSm`&qP#g5*F%Omb6Oc1&WXyOI8*K zYX}ep$(%k3gJwM20UwN9SD}?VbC&=ZI)d=(ij{4EcTs4~ZL#o5KaecK#koU32bI6U z#{%?zOeyzXC{l_ev-F;+yh1#)!>Cws?Si9uKHe5^BF~JI6_9Ya86Vcu{_3iyDfNqX zBU&F%6vOC-cCv@7un~Q`rQBlSmkv(w5BE7ZTZ6b7S&^0b=cA1EpT$07S4+XUm10~D zlo}&TgFWrt<7C7V*A)6R$Vlk?+}@^}t9bb6c*yJKCB1SLy;>U2E9w)qN~=Se*tc~m zEZ2OkU{hK-;Y~-)-QvWZXX0bJ*vz*}n=yqf?Z#R#Ve`SDwr_b#JUw!mf{^QN66f83 zj1O`LF9zq~#5YHHL70>B{Dj@0kH$<0;|=;}W_Q4xI6W(2--1xLvMWkAqm*Wg=1}!s z`pL!LZXM9IZw~|kB6SatE?M|CfERCK0$n$b%n%#N%4TA`NTv7b&G8|Xqjw86fH+V_ zOJSzA7dk#wIZVB`n}}2Y1K3c@EFSKk|3cN--}h2w06_1v-U4>kgdG`B6)YpvrI?qb z&D7G4-q~G&6D~BcDOq++Rj1_#8G@FS5|ib{$Okr2cwVv{OE4djELDMYUXn)hvO4{YQel4K@cmj^5o$-Z=Z2 zvzaou)a4e5@34BL@zC#LDy`wsU8o!r5r+U#QXEtVHN_8%a?ibWpnBK6-+Y=P^oSLY z2mv<@8H{3BwXt(Qs#b9yr`i7UMIKcS=gv(69LSG-9_3g@2R}0%r!-j$DJgZ#X79rY z$lFQ!I#&C<+Arg!W?RAhdm*}@y76t?=iDzNpJEJ(KwgjR3sj07${A4F4U6cj?do7{AxaZkl!cT6pTaAM?*i)lYU}B|D%DfjdVDqkH<&g_0W06=1GcL)Rp4 zgDgi>{7uKmsN9%EExVOMhovSA{^uGym_1ht4m1faPVWCpMBhaYZZ|3+(&9ZAE#v}IF zRr8WKVV;$VYfN5yhMT^PeR{Q&iYwvl9+?e8#dzVM=s+D>nJsq$&)K+l7Bt?M#Nq+jcY-IC)}^KF5SKZ35-e~Kx=8L?;_=XrS6sFq{pwOJJF|;MhFljOFOdZUQ{}<+PGdo<);TO!c<9!mE-(rkKT?J1d^ZU% zvSRe7W%zUrr!{)MD{7ew>AQY?0E|4J z-cN<@j2I}pt&e%9Y?+?g*S<-HOgM!l&w4S&c!(neQSAU&xwTqTtK$ZVD+_QpR?jO{ zZR&Y}wd_l*xn@qK5(>4muoxp1r5dxxr-T~@ib{L&Xw)lSj>GexLrBvIl)3IVZz0`z zZY;(HJ56^$Hzd|xR*=!V9fQMhn2xw1$QBDqRL?cr0bVKK%*0tq5~Nm4$11Ewx|kDq zN~nxFI(wHj;fDVcbR}QK4(l)`D!yB@a6Fj?5)0q!IaiNd=BUp0(w4fng1t_TbV;iC z=Jqkou}f_W>zJ%65oMpg);7SRJtW|Cg^MRi&24vTeVXX~;D#P{vxx(zNW-UbNL*4B zYBw46luW{G>r`jZe+~OeTxV5&vFdcS!^+9?S3<^Reiur0bkjCy1}M0fn$yMz37AkY zqBctk+dTwFmg5|>o}f^qQ`NVdnvFZ zIS{Y|_XG(#;dwi5kUlBYI7*yjb$Q)!G?pav8UvmX{$K1$8~YE!RCouhhnN5K4!=`Y zS(3#$K0kkKD`6O$YPEN9_(o4gTJ5MOB?kb%2dcVYZmd@37gTZk-_d8KK7R%#9|=S; zk^=2Z7gJ2c7*@%@S^81gmf?I=S5seVs!H0?{~l+_&n|~oByB2leoq=!p7yX2>v?h_ zMH9&upOl3LC&v0NX%7EwhCZ>Cf7X*Q3Vzb|hD&tj^O%6j+fI1AxwN;8oc)TH7b2oX zSx_PEK+7FpnicX7t_p5#WUCT#FXHmh{Q|MKW@_eCC8nm-`^CfKIw%d$6j@bA5$e19 zIuwhux!?d_n0G!R1TAnAa*j#X7%3Jm8`oVJUc!|jyCm?qMMJ=w(!_;inz;B}B5)J? z*gid}IC$^lf}VGdqo|9?z4slkD8ttIHR!@6Lf6x4IrWi_#D=9Qy@NohPr$fpE#+ z&R)R{0p~udP`bmb!}I3@sSsW-$l$4GSHrO+d2ku>Dvn&tED1k9VoKLeN^l_82*w9;s|qim zYqLvMCDPrm5bCive?r4}aednsV#DR*i{*?Kd5y7aH`dQy>dAj%QW5yFGZy)w}tH{`k{E&<(4J zl<4Os<81fw&cSYclb4>H5Vd-rJ9Ei(=d~i09{VdgB4r9Y%1HCD;YlXMOxA7ncUe(TP_XAAHG}F+Ck;FsRr4in@2QYOv17d;Vu$bj^2Q z!;W*Bt?tTW!eopc?Jp9LIa7tSi>9H{MOVCeGh*(ZU6e9n2POG1JFhPe`KdawXPFtS zG4Ou|GQw`I04Ko*ATsR$u#Vy4R7WLI90$^=-zK(rmGMsgaHPHO4Az{-X$o{oe!6@$ zKZDuCC^$o<{mg8h0h-bf&+9z>x|Z!Y2ido zhKY7f%E{!o)t0(dwZFg5TvfR^H_6~+BO}YRFgZBZ3&A+Q`wfuLcbk@=#>nqT7NHhk z1M!~`O7N_u9gOpXgv-)^2}t2iEmzAZ@a1lv)oA@j`|W4;nK(c}D@Fr`N>Gg$KJN1r zTg?~a7CKzzFd*5D@tJOG{kDxb!exKfy$xvaxjl&hxXz6pwTo>#O7|bND;mN);JEU3 zPAsb32X5P%PdgThVlfEV*Q+WYS2#0u>lygP1d*uaW+o*PcuXkGDanq z((WBA=S7rckvzS`TZo|SPO2{*at(&OlMU0-a78uO&hI3(Bx595#a*4jE~P1;ZI$T; z=tc2!6={5hq3rl&Z~h+UPR+#57B*mrO}1b^B?;f0LfpP)bY~oPAPF5*r6dbX_ELCR z=QyId#t+zbc=ofP$WNLAUJ((&twFxM2k6B-Y2=q^MHh3_5z=Gx5JU)oAWs_S>H(Ql zeJ2I&A9T!g!toa6?i$&}LjevIoPo+ed@n$H`Sf3o?{A9DVe6i6>fWHx*b$I-iggXx`vX*!I<0!69jTgE<50kU>fsV*ES5`g<1AE7zc zPH{`qM8FaD&7HA`&r%dH!01K{AkvSg;(hNMp-^u&Wf zl~=9QhCEfs)EG|hmA@7eL`n0o;klK10!kNNeio=-S(c(oMY_gr9W6JqK24u2aKg?| zm6_*p$>8H|*gwJDI4)41)mNQ)Armq+>gG}{>>Q4QMaX}!-RIeKGg7eX$oX{c9{t>_ zv{mEaJm%!&#@+on(x&s__~i0;isy^9l8t0n?2D3>R)kH^AVFKND=^Qg{ObCIWI`Gq z!*n*RPU%SM_c=U2eQ)4=Tif;)b+gz#`eS7-!_e1cna-kRwF;=hS;BlzN8=`rX{L{r z9#%CPNvrw2C|E*67SaJ~8S(2T0#)b1ThSlw2$zdZPxu`Y)?tmhuMZtI>pfhbyb8bW zce_XC;WzpxTyMd_;mIVis}*IB@Zv;sW<9`nh9-M*s2p{zsW zm?>5^?-rPOx#lDSB|Eh%K^V*HC2T~yJX@HQxc%r_zl={R&Vm24UQZAeMN2Y*_M`c3EX`lF54KFvPCKONAEB~NRZl-SXA@SDSyiqrZ=F?F zQk>@Xa5JVB%FJG`<6d4=O+Lz}>x)&6ps}W#3_uzie0Q&AX*Wnz(xBE*(luyzq;{_f zj$FL>8BshOIf*7YsBT=R94G)$g@qoo50j7?G{sw(O*DmwNxm;f`3OsvZ*)GVuAzQj zU?N)m{f!)(o6eE*$Da`7K~}%aZia}?@WM3B#C?k4!J-2#b^OxGDFKDX8zBO$X5!k5 z;SNa0{rY2cVMIZ4;Q=tnnqhf7yCxF*LE%d4BYSG!arjYA+(72|?=>!%gFQ!FsInN2 z=GwTNJTY$;9~^BS(<Vkc+?biP!Dm}llMza2oyd5WDjXC zCD0XO^cJaWf^VxHwQE_i&z_oa!e8P(nz}wi-#Zm1rCAHfoAvBwZ9LU>PIkZG;(QyZ z?Az8bqZXT-rZmf0(=w}~=OE9FS7eFF2J8l6E=;-RUCqBye%W8J7v6QSP_^XpfkG}K zDG0>X1ersu>bFhx-146cAFb|JaaO9{*YHTti)QR-(aeea1KcO`lE^(R9KUyPDq}VXE$r368Y1VSGGZE@yh3v` zVA>+{Zm)*DxZeKaf#AK$#1cseo+9X?_5%zSJn=ZFgT4q`Ie2iPT}rI`g~z12CNS{S zkl$QpUr%f@B=&*GqvLP~WkcibWvs6YX_k&t#{Fq#iJaxNoJuP4s$;AzO)MC?zZLIG zRffT`|B}V$sksg#Q~s&jX-}0_Owq6P!b^EZE_UMAQL4+l9w*E4DIf53v+lfNE|MPs zF_&jqy?2^|C<>Af5uTjb)RNNgF3@ag%QP=_!7+*8pxn?d7xb`F+6W~~OlA8aOPZTE zSYw6+V$aeCPEN*VaCUI!R`9foF*ksy^KYxO;C^8Q1vV#RstX0w#W973Ln1lHu)IyD zWlzspmDpVN-&}>6egJ2d8_KH*_n7}6)&>;UIb^XVJH1m zQ6&aZK6+GgMhzaI*)CKmYB$$k$Hd6fHfPJ4G;Ze(u6(x!{b1FPT3hQ?@E&&Jrfy~i zmUG;|%tf#S4K?ksba>_17J20tLM>ceRMYHd#|&HU8Cqfvm85jsb&E|Dtslo73Ju7% zW)TQfPHq<-Q+t$jFF!KFr6*XJW-xP+w2Po>(N*SJ3#bQmn6i?8qokB(HPW$h&zcSM zVWU!x)9WGpNSv!>bDum#Gjhf%(iCIP{<|$vRT*ht@AL0-?s2$GOIg~_V_~oCs)+3O z6g^ZdgqA7isp{Ak`i#%gOX{ERm*baHU&ZO`t z!xgKCL{ry&Asw?*7O2w)P5bGsr%{NCTum`bjPHt2s!*$-s+lK0zeIf#se%LgGnH;| zNzAvA5`ku%H<2Vv2wm%)#Adq>`r`JztEwtQS20>>qEj_jgMD-ZvXM0kVSHzvLK%so z^0n3Z^mL#4GtO)ig%pA~L$pzV>$|#XhY*LYOA(Ei zXN|Y9#4u?>{Y$s^32! z_qD*qf4o?TOt3XXD}}ne@5Aheve2x1;DX&ars^k4LY#gg!hYi1Qz@@u8#-s~EOdMr4YVFan zM2IopqW|Av2Y>a&IIU3SzD%cbs0@&CCXlos9c{EhHAm#_HVDtIE zs_g$Q$xFwKs5Lg!YE2A?mJ@65y_dS#Rd;w}nFeeVaYX5fv=;@UEV3r(M+E?!gex_&yj2fNQp~-_epCBJ_2Pc2_ z<%QH6zbQJiaIm~XC2`fGd6^vYl+duYtLflCd$g#U0aY4TO8OA?f8kB$(mE;I+fknMHvs(H}W<)wX%KkmR?8H{3DZK>Fi#i^y=XVehpIpRf)G7%do z7KE3fu4|Xl2BB!$!kd>Ycks9Y?PF+Et<`-pcLMLFdsL8dgL6N5UO=N*zI+=gT+WQp zGI7F4_{ld+;Tal>QDtHkH@I=&Q*#AzT5j!+(tU(~>lIhyU;fGT&s}&;l%IE0+&$&> zf&;s&f)#t4y~p|?T!>_Lc(SCrEYYqrUl-GG@bU3e6R`HkZ^n$>PlsSFfaYb-0C0N_MefdbuZh&ISVvI?turs5*%k*QW=PP(^Z`Z6?tRp6RndV3(^g``_0x{y z%Uyc2ax%Js2yaYdnM1r2NT#+hsd4TDWlN7l;FOU`;?5*u*wC>jaDTTwWaDM%6C_Pq zv3UPJ&5BM2J~B*3N|wa{W{>`CU|Mp7&&$NwS@+?2tz-Cd*2cQfzc3BaK5Kn!D&j?L z$UnpUz>B5>C)dpESM2~$l%Zuup z=xmDFp`;3?_L|d&U842#M`uD`2v$gt!7T1`7k-uTi=rw-8_z-9)N$v?;H4)h;D6z>Y`Ju=-|9KL%b z5MB+8eUH$b3Y>@`Y_$y|r-`1$Wbu-X_tZ6ZgOpANx|4nT<&jWFFN2WsbsbP?D2~G- zDP=$fwQ3A?4p_hHsl7O}ZHZjh_|VCK2!FxAM?v2A4wt*0iET~;+oUxA#U+TTpIW$u zOy7;-K>(+C#w&Df;ah%4FQP_?q9=NXc(fIMN#K4;GfVK+bVVbUah~c6&Cgf%Dy4K9 zTTak}32|!y#M1MID+<4We|5#G%IiP35eudyrcQ^=)HPS;=jIajscok=exder$InKe z^@O)*xDBEn6|@>vSGhJ5qyYMTj%tCu`f2d+aYJ??RLNiG78jZtxTmqVKE|~aCGmHU z4%tLh+uL}WTe~%|_Qc3`=&H89u0wnu+2(b3c)Gg0RFXr>=1@!sPO%9YFvVV)UDDbc zWZFqt4vwVnQm;KJxq(S~tN6&A7ql)K53|?Bm{=M{tlcSpgE%7Z_WdOTGTWHo=#!cPk;^^UIoEnw)QxNi(@$BTASPa)$94$iWccbaCqx2=qKke8~iOiJ6g z4LFdlCdZxv*?RR4YZSZhLLOJTzEjx-nwe}j!&vW5qZE++rp7F=QZxRFA!wjEd`lvJHKk6#?11a(c5u!0MqaN|CsB)GDHjegYw+Uvo)1x3 z;%Ez1>^g_)hE!ov){{kl3La1M5OQa)wDm}ld3#pkKM)-qwYN5|S{Ak)?D)sVt*X2L zcc2g0E{IG#f*X;I4Oc=$+Is-m%sU5hgx(V?*{OK6egmO72HA6Pw zYE&-u)YBn|ly3A<3*s1yqC((SJ}yImnSh*Em!8nY0s4=R0?7!1Uo&C%fq$0ag(pZJ z+ol{3Dob7aqg}Du*mW;h3|Z2_rVL#Q=+cU#81n}w#A7~A_h$o+G4+E@4uVvmD)H-w z)SGm?r8cjRcEDJS3Z2S^FdB<*P{)}v3gG}6Kfi|{|Gn#(zjqz|NTAD!!0oBI*S~{xcTE#P8Zt)a zZt|4gFl^7mDHrfP9+2jJJ}D`^tX>~J>Ty&NtdShKRv7_eUFx1kEX)Z7pL;?qkr^vS zk8*Ei{$U0N@AMzla+Lw%PN8H`27C(0-Y%o3`$kR7zsCj^m+4xa9M?g1n-Gudn3%^l zk6NnU>G4Cq0{p=5`9px442Y145pD!Gf?c=5_AzAdz8jnQa590E=xhxV;w!62Uc@^wqD0NMs zw?<2b9)cN6S=mdp>T36Q2|$2kPa?JcB~*!Y+R6_8lzO8i+@Jr?w@fr-vk9VzsM{(np0nfNz>f(68rzond4C+LT@uXVbn zI!@EF4mS9xs<3xqC(_LA5q+xdsQtFxFB+dHSm#!oZlru)}p6~9`SvCe_ zR5aLqT{yH5OsS}-z=#ApMo*aEBqge|!w}a%ENSEFN0CzcD0CeyGblS|hNl@yv(5FJ zrL-A9@ms3(F@Z5pUag+b*;+%g%Xo}u8tdb;)~zM$AL${>aP-U_TpASsQJMU_$fbrh zCJg9C&bS>^0X7nAK3THYnrKyeo$A-X8RC!)ZYwFhrW>r}W ztQ>E6GuxqbzAa4rV(@GNO#m)yks@YMA7EVQlM;p=X5T=Jn*^{)U1IjCB~y}0OwK7n zK>*Qd5vpctG*pBdD5*uY=SWBS@`B_Qte_b31H$h_6T+?{MlaEw(vP-WlCguQ`kkpk z16@<2gmPqIWJ>U3zPy|j&$_JicDOyp*{Ou!P!`iP)$!A>(`o~|_jK54Csa4(3=EUM ziUt7WT+y-Br@8&lDmTTy$NY2IK|bq$p3--1@;;z!3Iv1U{^Sy4?soJ3TBSF+ ztGLDnR^(3-+?BrRm%HB6^-{8A?Ab8xcz>A=t`=8wz4^s;OUu>XBa$7bxXTlPAM!W- zhh`AeRwSD7Za)xHG^8N%nhVaIs?)Wbe{Kvkt6B&ya~lW^X0^;>%4o*v~l@d?7h6~O3C`Q1iI4QjdjfCScZ>I9Lbnu zNp&DGO#}q^_-)Qt_pufX_$%f%AORM@fJHb$*k-*qywqf_AKscPAogD~RGZ?Ts0mES zYcKuNW!LTicCh_I%GFTcIDQf}#z399vfMnk^N z+P-6@_TEZermtykWaLssGZTm{ff=mSv$#8Use|FZ4M7*W%~&#LT55$>>=`8aDlF+V z%yTg;9~BSf%T|WF567T#=%zaJ=)G@%d54iX+p82#Qw*Zx%DwZWvdhs{7;>B-)Ly}8 zN5uABRIwOcyqBa_U(eLdSihQMg?}hcItOl%i}mJYd8w_YigoelPWGTYw-Q<9#&zGF#Ke9#=Duxbx?M3K-nd2?g_tIawjN3yniG$;flSX z?H@L6GN0&xCL??2H}szJLrnTNYw@F?nTqm%wlYZ50QSn2P33I@u!E%z7mmJzv6*Tc z-;<)QEf@~;$8{K2^6l--YqN-F`Gn@VTR5gn%A}hHUhR|0;!=zE)JG=lykYnCtI$~3 zxI0^`aG`ON#gDr)TZfej&MB!Xa&w%x954|~sH>`q;W!~S{rKR>_pmmmTv}F2IPmN2 z$|5yIE6WW3`L>*NU}~;kIa0O@>5x+ybK|i7JWt2NJgzC5ml`S$dEV~kSl&fK$lmDa zdTioaYz}+1=hIZ=dnfFw%+8G*{RJnC3+gj0KjROqtra|9PzaEazRoq(Po)?2e57Z2 z3Y^Bsw)Mn+jxzKpT3}*JsU90diryS6Dfn&UWc)M6w<1CIOXZU4_Sl76)9W6F3^`LC zIIg0pR=*g&M^|;+7pFz9?*J8{in956d>aLze6SAIpNOH#;XSp6n?2R^l7P3 z57-)4`g1RlaY@1yDWu49*6Ifj7vOavh$mIsNeVHSHr=dm?@Q?yQax!Vcu#~jT-?iq zE$_W*VFP;K${R%*h2m~{9E&S|Xi4p9#cg(Ve^^xZ&*ENcKX|h#TiaW-k^kP-;Xt$VdDO-sv`>Z_#6Lh&Ro`$%bY$H zB(iV8C#K>mmwk`uHS8}|XJF2OvcT;*d-E)!Xh6=%`cw0d0vND}y+22s-rS=3n&ESvohzc&*^b_f7R<;>qe~!wn4#rq( zq?8nGEfp25lr_`R2pJ-rTozVD$a1rnaZ6iO&Yegw9zh2X@ ze&ibKk96l=;ULXxuHMdEHX2vtjt{WpR9tyDci%rtZ|t2Lp8TE_2k!3q+D_!roT+L6eF%pfNS zfGE-DamWYF55ZIHE(DaKk};y)3_MKpqLi;G&TBpe;m#Y0C?GWKTzFCY<18>wBOQI_ z|5JX+*vrAGowQ5zi=q>?P+$Gx_;V6rLvK_fHa0iPw~C&LSH*j~6UYIL{i4UfhBPL%WD-6HrBnpX@oh zN~;|DdFit}7rvGBBJ&WYs#eKHqUYSV>n^E&ch^Q1#{)a5JUYv&xKze*+c+DOS;ndq z9y+m{9xB64(S9sE@hG;V`DeoJ?h77hLbsXhTXW#@Yo*aZ^#&`7W_FtWR&A7VpU`H#=52(pm(*ra@i<1R3S>3-x$=%V^a5 zU?+B4`BY};*ssMr>4^&h?x&}lnPym~z0{9M!+V3hFoGPzmk*1)5zfD=-hLn(=Ao(s z+z5xo5AWQ^%)$ljdB&k|%tV_rHSFuD#B4EO5UjQ7i$uD?r`!7K7LY|y?xJUIv%6Y# zb}9bd>*wO6N%iY-A7cN*q7`eJ-DUUGpsMcLPHmi1nVF{jr9>MnDw9jhyY1=vBUI$^uuV?I%fH9(yUgduA!=Y_NA0Cl|$$a zt%vJKO2QoTmMQJEr;i0jVY|)#;S@-Yhln12Vsxu%=ELiFqoJoIjj>(@_ z$$M?ZnEt{VTM3eiKXf?_TqiN8W;&`DonG2k<@rYrCq^3Q{o}e zY=R?B94gGQU(nUQ`Y!(_+zuqM3dJK^p#w1dOS^^>4_5Jxa~-l;Bozv(X8JrU>> zC@Gi-b?|!w$AR$uixfxxZzC4 z6W4A37@?{Hej1HXtuuAiMz{0O0Ad_l1fP#kO~ucMTvNGqH3<^We9ILFr%KX48SqOm z`__)Q9=C<;*9oSx&2HlTOPOE4f;LWM?zg-ijaJlviZeC~*Lko>U5VW_eT5GD-$QJl zc=-&(WOm+q`KZ}=n|OJgZ7pSW5~C*2bV zz?3W?Db> zrI^ag@DlrOSX*TIl>h=?5|dfz>>6oW0@~WZ1k;avMvr_>mX!m&<3eE>w1RU!?5ep9 z+H!-p`{VYyKN>6&p@fmim=Ict*6YBv>LZJ3YX>5Nnqp6#Ar!9gk!y7`vS=Wi;&a{$ z0NA6qkwQ+>9&*~AGvO_Dw^1L4_~abZYs~=#_(UhA$-ais($iHHb>o84?$kZ)zj=r$ zX*pQ3vPCcVn!Ao!Nn#(pTxSmho%F97#$7YMxx4W%8hsRd1dfuUc81^W3qj?bAkDFO z*?7!a!7U8@xBM@-Kdb_L6d-|gyl zrtEzK^kbjA_K*uBv^p;5zKJp?pX*Npa+bh~+o@veYG&)x-MfjhLm-r-9Hp@L&*B~c zI!MvECDw~hLW?;jNh{HXBj?y|PES9PVP33yz4;^ZjJ~KT&z08EbXX@t!S*v_^)XJx zrJ{v4x})(PMPu0cg>2CB1f<`0Zuyec)Ui)Y3rb4OQZ<1qr99VXJ|ey2ZQoyI%E}aq zKXXOu>20E~ylQzbbJcn0Uk7CyB1dU)u=fz06pg^zO@0^t{=dadg9pDFE%qAd`IWUw zZXefLAuVOPaxBmi+ubg*Te`H+tL43p&n7TYb!k^eisAvoHuFx9CV`pKKQn5q>DvzU zf)KL}ObFx)8gKs4ZudE1Rox-U`>0AhyEmA~7E|dkm?K6MUK%SLiLOVP&quj467Qinw$lwzRXR zqvA}%Pg&_T56f5`lSB<~eh_XpRz|!5aw@ADjn!j#`m|Son^4u5OB&omj>?L7=J>FZ ztl%&E8$nF)mams+c8f=&rtUyBXDZP)2>{1IO>LWJN%EJw(Psc3H|X;`p8U}#J|thN zFKJ#en$=TrNh&}-DO>c*1*nJ=<@1SN$YdAbcb$}KSoH!5;hH?D;S}so)mCfD3PGi$ zsS+9L#5F5*9~3VEQ{85^yq;&yy4Y8VVn3wVV{QSS^Jl(@Z6rDRmc}ZcnRvY80o{o+ zRh$1p>=!T6kp4XIE$}S#1dW-r0~ylQGiRULo2sL%Go6Arp=@*-?3&copO6#3s+G8* z3LBUa-{`OmO2&UDLn_!VImlb8vnmfZ?tm|w>IsthxZprz*#c_^UxN8utEeMJiX?V8 zYPL*Q#(5N^xRbCxy>3GqOWqonD@g6-LHRYX*bE5 zieQFpPT{S|JGBk6n5nfS=ZWa884a2asm$A7GUt8$TM~&BUzsvp YUNgED3R^rC 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�`KyT}&P1U3 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 z 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%0Da07~9w2^K+sE@~41fnC Date: Fri, 9 Aug 2024 07:00:38 -1000 Subject: [PATCH 18/29] Update to Geth 1.14.7 (#11382) * chore: update to support geth v1.14.7 * Update geth * Fix "private key curve is not secp256k1" error * Temporarily quiet noisy logs * signature test * Add comments about S256 curve override fix * Update geth * go.mod: update to op-geth v1.101407.0-rc.1 * op-e2e: fix L1/L2 miner settings * Also update devnet L1 base image * ci: bump ci-builder in circleci --------- Co-authored-by: Danyal Prout Co-authored-by: protolambda Co-authored-by: Sebastian Stammler --- .circleci/config.yml | 2 +- cannon/cmd/log.go | 2 +- cannon/mipsevm/tests/evm_test.go | 15 ++-- cannon/mipsevm/testutil/evm.go | 5 +- cannon/mipsevm/testutil/mips.go | 3 +- go.mod | 39 +++++----- go.sum | 76 +++++++++++-------- op-batcher/batcher/channel_builder_test.go | 4 +- .../batcher/channel_config_provider_test.go | 2 +- op-batcher/batcher/channel_manager_test.go | 10 +-- op-chain-ops/cmd/check-ecotone/main.go | 3 +- op-chain-ops/cmd/op-simulate/main.go | 3 +- op-chain-ops/cmd/protocol-version/main.go | 2 +- .../cmd/receipt-reference-builder/main.go | 2 +- .../cmd/receipt-reference-builder/pull.go | 8 +- op-chain-ops/srcmap/solutil.go | 17 ----- .../game/fault/contracts/faultdisputegame.go | 2 +- .../game/fault/trace/utils/preimage.go | 3 +- .../game/fault/trace/utils/preimage_test.go | 8 +- .../game/keccak/fetcher/fetcher_test.go | 2 +- op-e2e/actions/l1_miner.go | 7 +- op-e2e/actions/l1_replica.go | 4 +- op-e2e/actions/l2_engine.go | 7 +- op-e2e/actions/reorg_test.go | 6 +- op-e2e/actions/sync_test.go | 16 ++-- op-e2e/config/init.go | 3 +- op-e2e/devnet/devnet_test.go | 2 +- op-e2e/e2eutils/geth/geth.go | 32 +++++--- op-e2e/e2eutils/transactions/blobs.go | 6 +- op-e2e/external_geth/main.go | 2 + op-node/p2p/pings_test.go | 2 +- op-node/rollup/chain_spec_test.go | 2 +- op-node/rollup/derive/batch_test.go | 3 +- op-node/rollup/derive/batch_test_utils.go | 2 +- op-node/rollup/derive/channel_out_test.go | 7 +- op-node/rollup/derive/fuzz_parsers_test.go | 3 +- op-node/rollup/derive/span_batch_tx.go | 2 +- op-node/rollup/derive/span_batch_tx_test.go | 6 +- op-node/rollup/derive/span_batch_txs.go | 2 +- op-node/rollup/derive/test/random.go | 5 +- op-node/rollup/event/tracer_log.go | 3 +- op-program/client/l2/db.go | 2 +- op-program/client/l2/db_test.go | 5 +- op-program/client/l2/engine_test.go | 5 +- .../client/l2/engineapi/block_processor.go | 6 +- op-program/client/l2/oracle.go | 2 +- op-program/client/mpt/db.go | 2 +- op-service/client/http_test.go | 3 +- op-service/crypto/signature.go | 3 + op-service/crypto/signature_test.go | 56 ++++++++++++++ op-service/dial/rollup_sync_test.go | 2 +- op-service/eth/blob.go | 4 +- op-service/log/cli.go | 2 +- op-service/log/dynamic.go | 3 +- op-service/log/dynamic_test.go | 2 +- op-service/log/writer.go | 3 +- op-service/log/writer_test.go | 2 +- op-service/sources/batching/bound.go | 10 +-- op-service/sources/l1_beacon_client_test.go | 4 +- op-service/sources/rollupclient.go | 2 +- op-service/testlog/capturing.go | 3 +- op-service/testlog/testlog.go | 3 +- op-service/testutils/random.go | 5 +- op-service/txmgr/txmgr.go | 4 +- op-service/txmgr/txmgr_test.go | 2 +- op-wheel/cheat/cheat.go | 3 +- op-wheel/cmd/main.go | 4 +- op-wheel/engine/engine.go | 2 +- ops-bedrock/l1-geth.Dockerfile | 2 +- 69 files changed, 286 insertions(+), 190 deletions(-) create mode 100644 op-service/crypto/signature_test.go diff --git a/.circleci/config.yml b/.circleci/config.yml index ed1d41b189..acc32ae6dc 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ version: 2.1 parameters: ci_builder_image: type: string - default: us-docker.pkg.dev/oplabs-tools-artifacts/images/ci-builder:v0.50.0 + default: us-docker.pkg.dev/oplabs-tools-artifacts/images/ci-builder:v0.51.0 ci_builder_rust_image: type: string default: us-docker.pkg.dev/oplabs-tools-artifacts/images/ci-builder-rust:latest diff --git a/cannon/cmd/log.go b/cannon/cmd/log.go index 30e92e3e40..9270b22617 100644 --- a/cannon/cmd/log.go +++ b/cannon/cmd/log.go @@ -2,9 +2,9 @@ package cmd import ( "io" + "log/slog" "os" - "golang.org/x/exp/slog" "golang.org/x/term" "github.com/ethereum/go-ethereum/log" diff --git a/cannon/mipsevm/tests/evm_test.go b/cannon/mipsevm/tests/evm_test.go index f7ca26589c..41826be04d 100644 --- a/cannon/mipsevm/tests/evm_test.go +++ b/cannon/mipsevm/tests/evm_test.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/vm" "github.com/stretchr/testify/require" @@ -40,7 +41,7 @@ func TestEVM(t *testing.T) { require.NoError(t, err) contracts, addrs := testContractsSetup(t) - var tracer vm.EVMLogger // no-tracer by default, but test_util.MarkdownTracer + var tracer *tracing.Hooks // no-tracer by default, but test_util.MarkdownTracer for _, f := range testFiles { t.Run(f.Name(), func(t *testing.T) { @@ -102,7 +103,7 @@ func TestEVM(t *testing.T) { func TestEVM_CloneFlags(t *testing.T) { //contracts, addrs := testContractsSetup(t) - //var tracer vm.EVMLogger + //var tracer *tracing.Hooks cases := []struct { name string @@ -156,7 +157,7 @@ func TestEVM_CloneFlags(t *testing.T) { func TestEVMSingleStep(t *testing.T) { contracts, addrs := testContractsSetup(t) - var tracer vm.EVMLogger + var tracer *tracing.Hooks cases := []struct { name string @@ -194,7 +195,7 @@ func TestEVMSingleStep(t *testing.T) { func TestEVMSysWriteHint(t *testing.T) { contracts, addrs := testContractsSetup(t) - var tracer vm.EVMLogger + var tracer *tracing.Hooks cases := []struct { name string @@ -375,7 +376,7 @@ func TestEVMSysWriteHint(t *testing.T) { func TestEVMFault(t *testing.T) { contracts, addrs := testContractsSetup(t) - var tracer vm.EVMLogger // no-tracer by default, but see test_util.MarkdownTracer + var tracer *tracing.Hooks // no-tracer by default, but see test_util.MarkdownTracer sender := common.Address{0x13, 0x37} env, evmState := testutil.NewEVMEnv(contracts, addrs) @@ -422,7 +423,7 @@ func TestEVMFault(t *testing.T) { func TestHelloEVM(t *testing.T) { contracts, addrs := testContractsSetup(t) - var tracer vm.EVMLogger // no-tracer by default, but see test_util.MarkdownTracer + var tracer *tracing.Hooks // no-tracer by default, but see test_util.MarkdownTracer evm := testutil.NewMIPSEVM(contracts, addrs) evm.SetTracer(tracer) testutil.LogStepFailureAtCleanup(t, evm) @@ -464,7 +465,7 @@ func TestHelloEVM(t *testing.T) { func TestClaimEVM(t *testing.T) { contracts, addrs := testContractsSetup(t) - var tracer vm.EVMLogger // no-tracer by default, but see test_util.MarkdownTracer + var tracer *tracing.Hooks // no-tracer by default, but see test_util.MarkdownTracer evm := testutil.NewMIPSEVM(contracts, addrs) evm.SetTracer(tracer) testutil.LogStepFailureAtCleanup(t, evm) diff --git a/cannon/mipsevm/testutil/evm.go b/cannon/mipsevm/testutil/evm.go index 29edd6a63f..7cd48403b9 100644 --- a/cannon/mipsevm/testutil/evm.go +++ b/cannon/mipsevm/testutil/evm.go @@ -6,6 +6,7 @@ import ( "math/big" "os" + "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/eth/tracers/logger" "github.com/ethereum-optimism/optimism/op-chain-ops/foundry" @@ -122,6 +123,6 @@ func (d *testChain) GetHeader(h common.Hash, n uint64) *types.Header { } } -func MarkdownTracer() vm.EVMLogger { - return logger.NewMarkdownLogger(&logger.Config{}, os.Stdout) +func MarkdownTracer() *tracing.Hooks { + return logger.NewMarkdownLogger(&logger.Config{}, os.Stdout).Hooks() } diff --git a/cannon/mipsevm/testutil/mips.go b/cannon/mipsevm/testutil/mips.go index d79b5040c3..2b45ab2d39 100644 --- a/cannon/mipsevm/testutil/mips.go +++ b/cannon/mipsevm/testutil/mips.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/vm" "github.com/stretchr/testify/require" @@ -33,7 +34,7 @@ func NewMIPSEVM(artifacts *Artifacts, addrs *Addresses) *MIPSEVM { return &MIPSEVM{env, evmState, addrs, nil, artifacts, math.MaxUint64, nil} } -func (m *MIPSEVM) SetTracer(tracer vm.EVMLogger) { +func (m *MIPSEVM) SetTracer(tracer *tracing.Hooks) { m.env.Config.Tracer = tracer } diff --git a/go.mod b/go.mod index 8e6d7ed4f1..7914ba567f 100644 --- a/go.mod +++ b/go.mod @@ -8,11 +8,11 @@ require ( github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 github.com/cockroachdb/pebble v0.0.0-20231018212520-f6cde3fc2fa4 github.com/consensys/gnark-crypto v0.12.1 - github.com/crate-crypto/go-kzg-4844 v0.7.0 + github.com/crate-crypto/go-kzg-4844 v1.0.0 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3 github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240803025447-c92ef420eec2 - github.com/ethereum/go-ethereum v1.13.15 + github.com/ethereum/go-ethereum v1.14.7 github.com/fsnotify/fsnotify v1.7.0 github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb github.com/google/go-cmp v0.6.0 @@ -51,9 +51,9 @@ require ( require ( github.com/BurntSushi/toml v1.4.0 // indirect - github.com/DataDog/zstd v1.5.5 // indirect - github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/VictoriaMetrics/fastcache v1.12.1 // indirect + github.com/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/VictoriaMetrics/fastcache v1.12.2 // indirect github.com/allegro/bigcache v1.2.1 // indirect github.com/armon/go-metrics v0.4.1 // indirect github.com/benbjohnson/clock v1.3.5 // indirect @@ -63,8 +63,8 @@ require ( github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/btcsuite/btcd/btcutil v1.1.5 // indirect github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/cockroachdb/errors v1.11.1 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/cockroachdb/errors v1.11.3 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect @@ -72,28 +72,29 @@ require ( github.com/containerd/cgroups v1.1.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect - github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 // indirect + github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect - github.com/deckarep/golang-set/v2 v2.3.0 // indirect + github.com/deckarep/golang-set/v2 v2.6.0 // indirect github.com/decred/dcrd/crypto/blake256 v1.0.1 // indirect github.com/deepmap/oapi-codegen v1.8.2 // indirect github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de // indirect github.com/dlclark/regexp2 v1.7.0 // indirect github.com/docker/go-units v0.5.0 // indirect + github.com/donovanhide/eventsource v0.0.0-20210830082556-c59027999da0 // indirect github.com/dop251/goja v0.0.0-20230806174421-c933cf95e127 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/elastic/gosigar v0.14.2 // indirect - github.com/ethereum/c-kzg-4844 v0.4.0 // indirect - github.com/fatih/color v1.15.0 // indirect + github.com/ethereum/c-kzg-4844 v1.0.0 // indirect + github.com/ethereum/go-verkle v0.1.1-0.20240306133620-7d920df305f0 // indirect + github.com/fatih/color v1.16.0 // indirect github.com/felixge/fgprof v0.9.3 // indirect github.com/ferranbt/fastssz v0.1.2 // indirect github.com/fjl/memsize v0.0.2 // indirect github.com/flynn/noise v1.1.0 // indirect github.com/francoispqt/gojay v1.2.13 // indirect github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect - github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 // indirect - github.com/getsentry/sentry-go v0.20.0 // indirect + github.com/getsentry/sentry-go v0.27.0 // indirect github.com/go-ini/ini v1.67.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect @@ -103,7 +104,7 @@ require ( github.com/gofrs/flock v0.8.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v4 v4.5.0 // indirect - github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/protobuf v1.5.4 // indirect github.com/google/gopacket v1.1.19 // indirect github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6 // indirect github.com/google/uuid v1.6.0 // indirect @@ -129,7 +130,8 @@ require ( github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect github.com/jbenet/goprocess v0.1.4 // indirect github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267 // indirect - github.com/karalabe/usb v0.0.3-0.20230711191512-61db3e06439c // indirect + github.com/karalabe/hid v1.0.1-0.20240306101548-573246063e52 // indirect + github.com/kilic/bls12-381 v0.1.0 // indirect github.com/klauspost/cpuid/v2 v2.2.8 // indirect github.com/koron/go-ssdp v0.0.4 // indirect github.com/kr/pretty v0.3.1 // indirect @@ -189,6 +191,9 @@ require ( github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.48.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect + github.com/protolambda/bls12-381-util v0.1.0 // indirect + github.com/protolambda/zrnt v0.32.2 // indirect + github.com/protolambda/ztyp v0.2.2 // indirect github.com/quic-go/qpack v0.4.0 // indirect github.com/quic-go/quic-go v0.44.0 // indirect github.com/quic-go/webtransport-go v0.8.0 // indirect @@ -221,14 +226,14 @@ require ( golang.org/x/text v0.16.0 // indirect golang.org/x/tools v0.23.0 // indirect google.golang.org/protobuf v1.34.1 // indirect - gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect + gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect lukechampine.com/blake3 v1.2.1 // indirect rsc.io/tmplfunc v0.0.3 // indirect ) -replace github.com/ethereum/go-ethereum => github.com/ethereum-optimism/op-geth v1.101315.3-rc.2 +replace github.com/ethereum/go-ethereum v1.14.7 => github.com/ethereum-optimism/op-geth v1.101407.0-rc.1 //replace github.com/ethereum/go-ethereum v1.13.9 => ../op-geth diff --git a/go.sum b/go.sum index 80ac4747d0..c46caed5ae 100644 --- a/go.sum +++ b/go.sum @@ -14,13 +14,13 @@ github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0 github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= -github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e h1:ZIWapoIRN1VqT8GR8jAwb1Ie9GyehWjVcGh32Y2MznE= +github.com/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= -github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= +github.com/VictoriaMetrics/fastcache v1.12.2 h1:N0y9ASrJ0F6h0QaC3o6uJb3NIZ9VKLjCM7NQbSmF7WI= +github.com/VictoriaMetrics/fastcache v1.12.2/go.mod h1:AmC+Nzz1+3G2eCPapF6UcsnkThDcMsQicp4xDukwJYI= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -82,8 +82,9 @@ github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= @@ -96,8 +97,8 @@ github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= -github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= +github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I= +github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= github.com/cockroachdb/pebble v0.0.0-20231018212520-f6cde3fc2fa4 h1:PuHFhOUMnD62r80dN+Ik5qco2drekgsUSVdcHsvllec= @@ -121,10 +122,10 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:ma github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 h1:d28BXYi+wUpz1KBmiF9bWrjEMacUEREV6MBi2ODnrfQ= -github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= -github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA= -github.com/crate-crypto/go-kzg-4844 v0.7.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= +github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c h1:uQYC5Z1mdLRPrZhHjHxufI8+2UG/i25QG92j0Er9p6I= +github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= +github.com/crate-crypto/go-kzg-4844 v1.0.0 h1:TsSgHwrkTKecKJ4kadtHi4b3xHW5dCFUDFnUp1TsawI= +github.com/crate-crypto/go-kzg-4844 v1.0.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -134,8 +135,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U= -github.com/deckarep/golang-set/v2 v2.3.0 h1:qs18EKUfHm2X9fA50Mr/M5hccg2tNnVqsiBImnyDs0g= -github.com/deckarep/golang-set/v2 v2.3.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= +github.com/deckarep/golang-set/v2 v2.6.0 h1:XfcQbWM1LlMB8BsJ8N9vW5ehnnPVIw0je80NsVHagjM= +github.com/deckarep/golang-set/v2 v2.6.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= @@ -158,6 +159,8 @@ github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnm github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/donovanhide/eventsource v0.0.0-20210830082556-c59027999da0 h1:C7t6eeMaEQVy6e8CarIhscYQlNmw5e3G36y7l7Y21Ao= +github.com/donovanhide/eventsource v0.0.0-20210830082556-c59027999da0/go.mod h1:56wL82FO0bfMU5RvfXoIwSOP2ggqqxT+tAfNEIyxuHw= github.com/dop251/goja v0.0.0-20211022113120-dc8c55024d06/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= github.com/dop251/goja v0.0.0-20230806174421-c933cf95e127 h1:qwcF+vdFrvPSEUDSX5RVoRccG8a5DhOdWdQ4zN62zzo= github.com/dop251/goja v0.0.0-20230806174421-c933cf95e127/go.mod h1:QMWlm50DNe14hD7t24KEqZuUdC9sOTy8W6XbCU1mlw4= @@ -171,15 +174,17 @@ github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/ github.com/elastic/gosigar v0.14.2/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3 h1:RWHKLhCrQThMfch+QJ1Z8veEq5ZO3DfIhZ7xgRP9WTc= github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3/go.mod h1:QziizLAiF0KqyLdNJYD7O5cpDlaFMNZzlxYNcWsJUxs= -github.com/ethereum-optimism/op-geth v1.101315.3-rc.2 h1:4Ne3RUZ09uqY5QnbVuDVD2Xt8JbxegCv3mkICt3aT6c= -github.com/ethereum-optimism/op-geth v1.101315.3-rc.2/go.mod h1:nZ3TvP4mhOsfKkrgaT3GrDO4oCn5awPXFHKpVHuO63s= +github.com/ethereum-optimism/op-geth v1.101407.0-rc.1 h1:bE6V8GG46s7IX2s7prH26sKcVwW0/FbId3CEe5GYulQ= +github.com/ethereum-optimism/op-geth v1.101407.0-rc.1/go.mod h1:Zn0xPY3I/xX3Bm51kjXz9VSd+2ai7bEslVEAFTdVcpM= github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240803025447-c92ef420eec2 h1:ySJykDUyb8RbcfLL3pz0Cs5Ji6NMVT7kmAY634DOCoE= github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240803025447-c92ef420eec2/go.mod h1:zy9f3TNPS7pwW4msMitF83fp0Wf452tZ6+Fg6d4JyXM= -github.com/ethereum/c-kzg-4844 v0.4.0 h1:3MS1s4JtA868KpJxroZoepdV0ZKBp3u/O5HcZ7R3nlY= -github.com/ethereum/c-kzg-4844 v0.4.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= +github.com/ethereum/c-kzg-4844 v1.0.0 h1:0X1LBXxaEtYD9xsyj9B9ctQEZIpnvVDeoBx8aHEwTNA= +github.com/ethereum/c-kzg-4844 v1.0.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= +github.com/ethereum/go-verkle v0.1.1-0.20240306133620-7d920df305f0 h1:KrE8I4reeVvf7C1tm8elRjj4BdscTYzz/WAbYyf/JI4= +github.com/ethereum/go-verkle v0.1.1-0.20240306133620-7d920df305f0/go.mod h1:D9AJLVXSyZQXJQVk8oh1EwjISE+sJTn2duYIZC0dy3w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= -github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g= github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= github.com/ferranbt/fastssz v0.1.2 h1:Dky6dXlngF6Qjc+EfDipAkE83N5I5DE68bY6O0VLNPk= @@ -198,12 +203,10 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 h1:BAIP2GihuqhwdILrV+7GJel5lyPV3u1+PgzrWLc0TkE= -github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46/go.mod h1:QNpY22eby74jVhqH4WhDLDwxc/vqsern6pW+u2kbkpc= github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/getsentry/sentry-go v0.20.0 h1:bwXW98iMRIWxn+4FgPW7vMrjmbym6HblXALmhjHmQaQ= -github.com/getsentry/sentry-go v0.20.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= +github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= +github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= @@ -258,8 +261,8 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= @@ -340,6 +343,7 @@ github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4 h1:X4egAf/gcS1zATw6w github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= +github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/holiman/uint256 v1.3.1 h1:JfTzmih28bittyHM8z360dCjIA9dbPIBlcTI6lmctQs= github.com/holiman/uint256 v1.3.1/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= @@ -386,8 +390,10 @@ github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCV github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/karalabe/usb v0.0.3-0.20230711191512-61db3e06439c h1:AqsttAyEyIEsNz5WLRwuRwjiT5CMDUfLk6cFJDVPebs= -github.com/karalabe/usb v0.0.3-0.20230711191512-61db3e06439c/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= +github.com/karalabe/hid v1.0.1-0.20240306101548-573246063e52 h1:msKODTL1m0wigztaqILOtla9HeW1ciscYG4xjLtvk5I= +github.com/karalabe/hid v1.0.1-0.20240306101548-573246063e52/go.mod h1:qk1sX/IBgppQNcGCRoj90u6EGC056EBoIc1oEjCWla8= +github.com/kilic/bls12-381 v0.1.0 h1:encrdjqKMEvabVQ7qYOKu1OvhqpK4s47wDYtNiPtlp4= +github.com/kilic/bls12-381 v0.1.0/go.mod h1:vDTTHJONJ6G+P2R74EhnyotQDTliQDnFEwhdmfzw1ig= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= @@ -654,8 +660,14 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/protolambda/bls12-381-util v0.1.0 h1:05DU2wJN7DTU7z28+Q+zejXkIsA/MF8JZQGhtBZZiWk= +github.com/protolambda/bls12-381-util v0.1.0/go.mod h1:cdkysJTRpeFeuUVx/TXGDQNMTiRAalk1vQw3TYTHcE4= github.com/protolambda/ctxlock v0.1.0 h1:rCUY3+vRdcdZXqT07iXgyr744J2DU2LCBIXowYAjBCE= github.com/protolambda/ctxlock v0.1.0/go.mod h1:vefhX6rIZH8rsg5ZpOJfEDYQOppZi19SfPiGOFrNnwM= +github.com/protolambda/zrnt v0.32.2 h1:KZ48T+3UhsPXNdtE/5QEvGc9DGjUaRI17nJaoznoIaM= +github.com/protolambda/zrnt v0.32.2/go.mod h1:A0fezkp9Tt3GBLATSPIbuY4ywYESyAuc/FFmPKg8Lqs= +github.com/protolambda/ztyp v0.2.2 h1:rVcL3vBu9W/aV646zF6caLS/dyn9BN8NYiuJzicLNyY= +github.com/protolambda/ztyp v0.2.2/go.mod h1:9bYgKGqg3wJqT9ac1gI2hnVb0STQq7p/1lapqrqY1dU= github.com/prysmaticlabs/gohashtree v0.0.1-alpha.0.20220714111606-acbb2962fb48 h1:cSo6/vk8YpvkLbk9v3FO97cakNmUoxwi2KMP8hd5WIw= github.com/prysmaticlabs/gohashtree v0.0.1-alpha.0.20220714111606-acbb2962fb48/go.mod h1:4pWaT30XoEx1j8KNJf3TV+E3mQkaufn7mf+jRNb/Fuk= github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= @@ -911,6 +923,7 @@ golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -937,6 +950,7 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= @@ -1037,8 +1051,8 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/op-batcher/batcher/channel_builder_test.go b/op-batcher/batcher/channel_builder_test.go index 188a46ecc8..2d5187d3b2 100644 --- a/op-batcher/batcher/channel_builder_test.go +++ b/op-batcher/batcher/channel_builder_test.go @@ -62,7 +62,7 @@ func newMiniL2BlockWithNumberParentAndL1Information(numTx int, l2Number *big.Int Difficulty: common.Big0, Number: big.NewInt(l1Number), Time: blockTime, - }, nil, nil, nil, trie.NewStackTrie(nil)) + }, nil, nil, trie.NewStackTrie(nil)) l1InfoTx, err := derive.L1InfoDeposit(&defaultTestRollupConfig, eth.SystemConfig{}, 0, eth.BlockToInfo(l1Block), blockTime) if err != nil { panic(err) @@ -77,7 +77,7 @@ func newMiniL2BlockWithNumberParentAndL1Information(numTx int, l2Number *big.Int return types.NewBlock(&types.Header{ Number: l2Number, ParentHash: parent, - }, txs, nil, nil, trie.NewStackTrie(nil)) + }, &types.Body{Transactions: txs}, nil, trie.NewStackTrie(nil)) } // addTooManyBlocks adds blocks to the channel until it hits an error, diff --git a/op-batcher/batcher/channel_config_provider_test.go b/op-batcher/batcher/channel_config_provider_test.go index 9e512fbb88..169d122e21 100644 --- a/op-batcher/batcher/channel_config_provider_test.go +++ b/op-batcher/batcher/channel_config_provider_test.go @@ -3,6 +3,7 @@ package batcher import ( "context" "errors" + "log/slog" "math/big" "testing" "time" @@ -10,7 +11,6 @@ import ( "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/testlog" "github.com/stretchr/testify/require" - "golang.org/x/exp/slog" ) type mockGasPricer struct { diff --git a/op-batcher/batcher/channel_manager_test.go b/op-batcher/batcher/channel_manager_test.go index d6c3d2e933..474942ce5e 100644 --- a/op-batcher/batcher/channel_manager_test.go +++ b/op-batcher/batcher/channel_manager_test.go @@ -67,19 +67,19 @@ func ChannelManagerReturnsErrReorg(t *testing.T, batchType uint) { a := types.NewBlock(&types.Header{ Number: big.NewInt(0), - }, nil, nil, nil, nil) + }, nil, nil, nil) b := types.NewBlock(&types.Header{ Number: big.NewInt(1), ParentHash: a.Hash(), - }, nil, nil, nil, nil) + }, nil, nil, nil) c := types.NewBlock(&types.Header{ Number: big.NewInt(2), ParentHash: b.Hash(), - }, nil, nil, nil, nil) + }, nil, nil, nil) x := types.NewBlock(&types.Header{ Number: big.NewInt(2), ParentHash: common.Hash{0xff}, - }, nil, nil, nil, nil) + }, nil, nil, nil) require.NoError(t, m.AddL2Block(a)) require.NoError(t, m.AddL2Block(b)) @@ -169,7 +169,7 @@ func ChannelManager_Clear(t *testing.T, batchType uint) { b := types.NewBlock(&types.Header{ Number: big.NewInt(1), ParentHash: a.Hash(), - }, nil, nil, nil, nil) + }, nil, nil, nil) require.NoError(m.AddL2Block(b)) require.Len(m.blocks, 1) require.Equal(b.Hash(), m.tip) diff --git a/op-chain-ops/cmd/check-ecotone/main.go b/op-chain-ops/cmd/check-ecotone/main.go index dcdc4c3a29..2f46f03d29 100644 --- a/op-chain-ops/cmd/check-ecotone/main.go +++ b/op-chain-ops/cmd/check-ecotone/main.go @@ -271,7 +271,8 @@ func check4844Precompile(ctx context.Context, env *actionEnv) error { return fmt.Errorf("failed to compute commitment: %w", err) } point := kzg4844.Point{} - proof, claim, err := kzg4844.ComputeProof(kzg4844.Blob(x), point) + blob := kzg4844.Blob(x) + proof, claim, err := kzg4844.ComputeProof(&blob, point) if err != nil { return fmt.Errorf("failed to compute proof: %w", err) } diff --git a/op-chain-ops/cmd/op-simulate/main.go b/op-chain-ops/cmd/op-simulate/main.go index cec69c2454..83aab87142 100644 --- a/op-chain-ops/cmd/op-simulate/main.go +++ b/op-chain-ops/cmd/op-simulate/main.go @@ -11,6 +11,7 @@ import ( "path" "time" + "github.com/ethereum/go-ethereum/core/tracing" "github.com/holiman/uint256" "github.com/pkg/profile" "github.com/urfave/cli/v2" @@ -258,7 +259,7 @@ func simulate(ctx context.Context, logger log.Logger, conf *params.ChainConfig, } for addr, acc := range dump { state.CreateAccount(addr) - state.SetBalance(addr, uint256.MustFromBig((*big.Int)(&acc.Balance))) + state.SetBalance(addr, uint256.MustFromBig((*big.Int)(&acc.Balance)), tracing.BalanceChangeUnspecified) state.SetNonce(addr, acc.Nonce) state.SetCode(addr, acc.Code) state.SetStorage(addr, acc.Storage) diff --git a/op-chain-ops/cmd/protocol-version/main.go b/op-chain-ops/cmd/protocol-version/main.go index a5bd6b4349..cf4fef1efd 100644 --- a/op-chain-ops/cmd/protocol-version/main.go +++ b/op-chain-ops/cmd/protocol-version/main.go @@ -3,11 +3,11 @@ package main import ( "encoding/hex" "fmt" + "log/slog" "os" "github.com/mattn/go-isatty" "github.com/urfave/cli/v2" - "golang.org/x/exp/slog" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" diff --git a/op-chain-ops/cmd/receipt-reference-builder/main.go b/op-chain-ops/cmd/receipt-reference-builder/main.go index 0418e92193..90cd9bd456 100644 --- a/op-chain-ops/cmd/receipt-reference-builder/main.go +++ b/op-chain-ops/cmd/receipt-reference-builder/main.go @@ -1,12 +1,12 @@ package main import ( + "log/slog" "os" "time" "github.com/mattn/go-isatty" "github.com/urfave/cli/v2" - "golang.org/x/exp/slog" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" diff --git a/op-chain-ops/cmd/receipt-reference-builder/pull.go b/op-chain-ops/cmd/receipt-reference-builder/pull.go index d6fa95eef3..3c69295502 100644 --- a/op-chain-ops/cmd/receipt-reference-builder/pull.go +++ b/op-chain-ops/cmd/receipt-reference-builder/pull.go @@ -298,7 +298,7 @@ func processBlockRange( // process each transaction in the block for j := 0; j < len(b.Transactions); j++ { tx := b.Transactions[j] - ok, err := checkTransaction(ctx, c, *tx, log) + ok, err := checkTransaction(ctx, c, tx, log) if err != nil { log.Error("Failed to Check Tx", "Err", err) return []result{}, err @@ -346,8 +346,8 @@ func batchBlockByNumber(ctx context.Context, c *ethclient.Client, blockNumbers [ } // checkTransaction will check if a transaction is a user deposit, and not initiated by the system address -func checkTransaction(ctx context.Context, c *ethclient.Client, tx types.Transaction, log log.Logger) (bool, error) { - from, err := types.Sender(types.LatestSignerForChainID(tx.ChainId()), &tx) +func checkTransaction(ctx context.Context, c *ethclient.Client, tx *types.Transaction, log log.Logger) (bool, error) { + from, err := types.Sender(types.LatestSignerForChainID(tx.ChainId()), tx) if err != nil { log.Error("Failed to Get Sender", "Err", err) return false, err @@ -355,7 +355,7 @@ func checkTransaction(ctx context.Context, c *ethclient.Client, tx types.Transac // we are filtering for deposit transactions which are not system transactions if tx.Type() == depositType && from != systemAddress { - log.Info("Got Transaction", "From", from, "Nonce", *tx.EffectiveNonce(), "Type", tx.Type()) + log.Info("Got Transaction", "From", from, "Nonce", tx.EffectiveNonce(), "Type", tx.Type()) return true, nil } return false, nil diff --git a/op-chain-ops/srcmap/solutil.go b/op-chain-ops/srcmap/solutil.go index 01b1add4bc..9944db5587 100644 --- a/op-chain-ops/srcmap/solutil.go +++ b/op-chain-ops/srcmap/solutil.go @@ -3,7 +3,6 @@ package srcmap import ( "fmt" "io" - "math/big" "os" "strconv" "strings" @@ -192,20 +191,6 @@ type SourceMapTracer struct { out io.Writer } -func (s *SourceMapTracer) CaptureTxStart(gasLimit uint64) {} - -func (s *SourceMapTracer) CaptureTxEnd(restGas uint64) {} - -func (s *SourceMapTracer) CaptureStart(env *vm.EVM, from common.Address, to common.Address, create bool, input []byte, gas uint64, value *big.Int) { -} - -func (s *SourceMapTracer) CaptureEnd(output []byte, gasUsed uint64, err error) {} - -func (s *SourceMapTracer) CaptureEnter(typ vm.OpCode, from common.Address, to common.Address, input []byte, gas uint64, value *big.Int) { -} - -func (s *SourceMapTracer) CaptureExit(output []byte, gasUsed uint64, err error) {} - func (s *SourceMapTracer) info(codeAddr *common.Address, pc uint64) string { info := "non-contract" if codeAddr != nil { @@ -243,5 +228,3 @@ func (s *SourceMapTracer) CaptureFault(pc uint64, op vm.OpCode, gas, cost uint64 fmt.Fprintf(s.out, "%3d: %x\n", -i, stack[len(stack)-1-i].Bytes32()) } } - -var _ vm.EVMLogger = (*SourceMapTracer)(nil) diff --git a/op-challenger/game/fault/contracts/faultdisputegame.go b/op-challenger/game/fault/contracts/faultdisputegame.go index d2c13060ff..1c71d20beb 100644 --- a/op-challenger/game/fault/contracts/faultdisputegame.go +++ b/op-challenger/game/fault/contracts/faultdisputegame.go @@ -307,7 +307,7 @@ func (f *FaultDisputeGameContractLatest) ClaimCreditTx(ctx context.Context, reci call := f.contract.Call(methodClaimCredit, recipient) _, err := f.multiCaller.SingleCall(ctx, rpcblock.Latest, call) if err != nil { - return txmgr.TxCandidate{}, fmt.Errorf("%w: %v", ErrSimulationFailed, err.Error()) + return txmgr.TxCandidate{}, fmt.Errorf("%w: %w", ErrSimulationFailed, err) } return call.ToTxCandidate() } diff --git a/op-challenger/game/fault/trace/utils/preimage.go b/op-challenger/game/fault/trace/utils/preimage.go index b13333a566..09a48ee912 100644 --- a/op-challenger/game/fault/trace/utils/preimage.go +++ b/op-challenger/game/fault/trace/utils/preimage.go @@ -89,7 +89,8 @@ func (l *PreimageLoader) loadBlobPreimage(proof *ProofData) (*types.PreimageOrac // Compute the KZG proof for the required field element var point kzg4844.Point new(big.Int).SetUint64(requiredFieldElement).FillBytes(point[:]) - kzgProof, claim, err := kzg4844.ComputeProof(kzg4844.Blob(blob), point) + data := kzg4844.Blob(blob) + kzgProof, claim, err := kzg4844.ComputeProof(&data, point) if err != nil { return nil, fmt.Errorf("failed to compute kzg proof: %w", err) } diff --git a/op-challenger/game/fault/trace/utils/preimage_test.go b/op-challenger/game/fault/trace/utils/preimage_test.go index e2c9e87ede..46778f080c 100644 --- a/op-challenger/game/fault/trace/utils/preimage_test.go +++ b/op-challenger/game/fault/trace/utils/preimage_test.go @@ -63,15 +63,15 @@ func TestPreimageLoader_SimpleTypes(t *testing.T) { } func TestPreimageLoader_BlobPreimage(t *testing.T) { - blob := testBlob() - commitment, err := kzg4844.BlobToCommitment(kzg4844.Blob(blob)) + blob := kzg4844.Blob(testBlob()) + commitment, err := kzg4844.BlobToCommitment(&blob) require.NoError(t, err) fieldIndex := uint64(24) elementData := blob[fieldIndex<<5 : (fieldIndex+1)<<5] var point kzg4844.Point new(big.Int).SetUint64(fieldIndex).FillBytes(point[:]) - kzgProof, claim, err := kzg4844.ComputeProof(kzg4844.Blob(blob), point) + kzgProof, claim, err := kzg4844.ComputeProof(&blob, point) require.NoError(t, err) elementDataWithLengthPrefix := make([]byte, len(elementData)+lengthPrefixSize) binary.BigEndian.PutUint64(elementDataWithLengthPrefix[:lengthPrefixSize], uint64(len(elementData))) @@ -129,7 +129,7 @@ func TestPreimageLoader_BlobPreimage(t *testing.T) { t.Run("Valid", func(t *testing.T) { kv := kvstore.NewMemKV() loader := NewPreimageLoader(kv.Get) - storeBlob(t, kv, gokzg4844.KZGCommitment(commitment), blob) + storeBlob(t, kv, gokzg4844.KZGCommitment(commitment), gokzg4844.Blob(blob)) actual, err := loader.LoadPreimage(proof) require.NoError(t, err) diff --git a/op-challenger/game/keccak/fetcher/fetcher_test.go b/op-challenger/game/keccak/fetcher/fetcher_test.go index cedff735e9..2a976b3e6d 100644 --- a/op-challenger/game/keccak/fetcher/fetcher_test.go +++ b/op-challenger/game/keccak/fetcher/fetcher_test.go @@ -437,7 +437,7 @@ func (s *stubL1Source) BlockByNumber(_ context.Context, number *big.Int) (*types if !ok { return nil, errors.New("not found") } - return (&types.Block{}).WithBody(txs, nil), nil + return (&types.Block{}).WithBody(types.Body{Transactions: txs}), nil } func (s *stubL1Source) TransactionReceipt(_ context.Context, txHash common.Hash) (*types.Receipt, error) { diff --git a/op-e2e/actions/l1_miner.go b/op-e2e/actions/l1_miner.go index c378cd9f5c..97ca5c091c 100644 --- a/op-e2e/actions/l1_miner.go +++ b/op-e2e/actions/l1_miner.go @@ -207,10 +207,13 @@ func (s *L1Miner) ActL1EndBlock(t Testing) { s.l1Building = false s.l1BuildingHeader.GasUsed = s.l1BuildingHeader.GasLimit - uint64(*s.l1GasPool) s.l1BuildingHeader.Root = s.l1BuildingState.IntermediateRoot(s.l1Cfg.Config.IsEIP158(s.l1BuildingHeader.Number)) - block := types.NewBlock(s.l1BuildingHeader, s.l1Transactions, nil, s.l1Receipts, trie.NewStackTrie(nil)) + + var withdrawals []*types.Withdrawal if s.l1Cfg.Config.IsShanghai(s.l1BuildingHeader.Number, s.l1BuildingHeader.Time) { - block = block.WithWithdrawals(make([]*types.Withdrawal, 0)) + withdrawals = make([]*types.Withdrawal, 0) } + + block := types.NewBlock(s.l1BuildingHeader, &types.Body{Transactions: s.l1Transactions, Withdrawals: withdrawals}, s.l1Receipts, trie.NewStackTrie(nil)) if s.l1Cfg.Config.IsCancun(s.l1BuildingHeader.Number, s.l1BuildingHeader.Time) { parent := s.l1Chain.GetHeaderByHash(s.l1BuildingHeader.ParentHash) var ( diff --git a/op-e2e/actions/l1_replica.go b/op-e2e/actions/l1_replica.go index 430dffa392..fb04275706 100644 --- a/op-e2e/actions/l1_replica.go +++ b/op-e2e/actions/l1_replica.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/require" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/txpool/blobpool" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth" @@ -54,6 +55,8 @@ func NewL1Replica(t Testing, log log.Logger, genesis *core.Genesis) *L1Replica { NetworkId: genesis.Config.ChainID.Uint64(), Genesis: genesis, RollupDisableTxPoolGossip: true, + StateScheme: rawdb.HashScheme, + NoPruning: true, BlobPool: blobpool.Config{ Datadir: t.TempDir(), Datacap: blobpool.DefaultConfig.Datacap, @@ -80,7 +83,6 @@ func NewL1Replica(t Testing, log log.Logger, genesis *core.Genesis) *L1Replica { backend, err := eth.New(n, ethCfg) require.NoError(t, err) - backend.Merger().FinalizePoS() n.RegisterAPIs(tracers.APIs(backend.APIBackend)) diff --git a/op-e2e/actions/l2_engine.go b/op-e2e/actions/l2_engine.go index 88d40ec2a3..54267ee9da 100644 --- a/op-e2e/actions/l2_engine.go +++ b/op-e2e/actions/l2_engine.go @@ -5,6 +5,7 @@ import ( "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" "github.com/ethereum-optimism/optimism/op-program/client/l2/engineapi" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/stretchr/testify/require" "github.com/ethereum/go-ethereum/common" @@ -83,8 +84,10 @@ func NewL2Engine(t Testing, log log.Logger, genesis *core.Genesis, rollupGenesis func newBackend(t e2eutils.TestingBase, genesis *core.Genesis, jwtPath string, options []EngineOption) (*node.Node, *geth.Ethereum, *engineApiBackend) { ethCfg := ðconfig.Config{ - NetworkId: genesis.Config.ChainID.Uint64(), - Genesis: genesis, + NetworkId: genesis.Config.ChainID.Uint64(), + Genesis: genesis, + StateScheme: rawdb.HashScheme, + NoPruning: true, } nodeCfg := &node.Config{ Name: "l2-geth", diff --git a/op-e2e/actions/reorg_test.go b/op-e2e/actions/reorg_test.go index 66273bd624..2370c9774f 100644 --- a/op-e2e/actions/reorg_test.go +++ b/op-e2e/actions/reorg_test.go @@ -397,7 +397,7 @@ func DeepReorg(gt *testing.T, deltaTimeOffset *hexutil.Uint64) { // Create a var to store the ref for the second to last block of the second sequencing window var blockA39 eth.L1BlockRef - var aliceL2TxBlock types.Block + var aliceL2TxBlock *types.Block // Mine enough empty blocks on L1 to reach two sequence windows. for i := uint64(0); i < sd.RollupCfg.SeqWindowSize*3; i++ { // At block #50, send a batch to L1 containing all L2 blocks built up to this point. @@ -448,7 +448,7 @@ func DeepReorg(gt *testing.T, deltaTimeOffset *hexutil.Uint64) { b0, err := l2Client.BlockByNumber(t.Ctx(), big.NewInt(int64(sequencer.L2Unsafe().Number))) require.NoError(t, err, "failed to fetch unsafe head of L2 after submitting alice's transaction") - aliceL2TxBlock = *b0 + aliceL2TxBlock = b0 } // Ask sequencer to handle new L1 head and build L2 blocks up to the L1 head @@ -572,6 +572,8 @@ func DeepReorg(gt *testing.T, deltaTimeOffset *hexutil.Uint64) { require.Equal(t, verifier.L2Safe(), verifier.L2Unsafe(), "L2 safe and unsafe head should be equal") checkVerifEngine() + require.NotNil(gt, aliceL2TxBlock) + // Ensure that the parent of the L2 block containing Alice's transaction still exists b0, err := l2Client.BlockByHash(t.Ctx(), aliceL2TxBlock.ParentHash()) require.NoError(t, err, "Parent of the L2 block containing Alice's transaction should still exist on L2") diff --git a/op-e2e/actions/sync_test.go b/op-e2e/actions/sync_test.go index e8c6b9a782..7ff35eab47 100644 --- a/op-e2e/actions/sync_test.go +++ b/op-e2e/actions/sync_test.go @@ -243,12 +243,12 @@ func TestBackupUnsafe(gt *testing.T) { To: &dp.Addresses.Bob, Value: e2eutils.Ether(2), }) - block = block.WithBody([]*types.Transaction{block.Transactions()[0], validTx}, []*types.Header{}) + block = block.WithBody(types.Body{Transactions: []*types.Transaction{block.Transactions()[0], validTx}}) } if i == 3 { // Make block B3 as an invalid block invalidTx := testutils.RandomTx(rng, big.NewInt(100), signer) - block = block.WithBody([]*types.Transaction{block.Transactions()[0], invalidTx}, []*types.Header{}) + block = block.WithBody(types.Body{Transactions: []*types.Transaction{block.Transactions()[0], invalidTx}}) } // Add A1, B2, B3, B4, B5 into the channel err = channelOut.AddBlock(sd.RollupCfg, block) @@ -404,12 +404,12 @@ func TestBackupUnsafeReorgForkChoiceInputError(gt *testing.T) { To: &dp.Addresses.Bob, Value: e2eutils.Ether(2), }) - block = block.WithBody([]*types.Transaction{block.Transactions()[0], validTx}, []*types.Header{}) + block = block.WithBody(types.Body{Transactions: []*types.Transaction{block.Transactions()[0], validTx}}) } if i == 3 { // Make block B3 as an invalid block invalidTx := testutils.RandomTx(rng, big.NewInt(100), signer) - block = block.WithBody([]*types.Transaction{block.Transactions()[0], invalidTx}, []*types.Header{}) + block = block.WithBody(types.Body{Transactions: []*types.Transaction{block.Transactions()[0], invalidTx}}) } // Add A1, B2, B3, B4, B5 into the channel err = channelOut.AddBlock(sd.RollupCfg, block) @@ -537,12 +537,12 @@ func TestBackupUnsafeReorgForkChoiceNotInputError(gt *testing.T) { To: &dp.Addresses.Bob, Value: e2eutils.Ether(2), }) - block = block.WithBody([]*types.Transaction{block.Transactions()[0], validTx}, []*types.Header{}) + block = block.WithBody(types.Body{Transactions: []*types.Transaction{block.Transactions()[0], validTx}}) } if i == 3 { // Make block B3 as an invalid block invalidTx := testutils.RandomTx(rng, big.NewInt(100), signer) - block = block.WithBody([]*types.Transaction{block.Transactions()[0], invalidTx}, []*types.Header{}) + block = block.WithBody(types.Body{Transactions: []*types.Transaction{block.Transactions()[0], invalidTx}}) } // Add A1, B2, B3, B4, B5 into the channel err = channelOut.AddBlock(sd.RollupCfg, block) @@ -919,7 +919,7 @@ func TestInvalidPayloadInSpanBatch(gt *testing.T) { if i == 8 { // Make block A8 as an invalid block invalidTx := testutils.RandomTx(rng, big.NewInt(100), signer) - block = block.WithBody([]*types.Transaction{block.Transactions()[0], invalidTx}, []*types.Header{}) + block = block.WithBody(types.Body{Transactions: []*types.Transaction{block.Transactions()[0], invalidTx}}) } // Add A1 ~ A12 into the channel err = channelOut.AddBlock(sd.RollupCfg, block) @@ -968,7 +968,7 @@ func TestInvalidPayloadInSpanBatch(gt *testing.T) { Data: data, }) // Create valid new block B1 at the same height as A1 - block = block.WithBody([]*types.Transaction{block.Transactions()[0], tx}, []*types.Header{}) + block = block.WithBody(types.Body{Transactions: []*types.Transaction{block.Transactions()[0], tx}}) } // Add B1, A2 ~ A12 into the channel err = channelOut.AddBlock(sd.RollupCfg, block) diff --git a/op-e2e/config/init.go b/op-e2e/config/init.go index 54ad51d57a..526c7a96b3 100644 --- a/op-e2e/config/init.go +++ b/op-e2e/config/init.go @@ -5,13 +5,12 @@ import ( "errors" "flag" "fmt" + "log/slog" "os" "path/filepath" "testing" "time" - "golang.org/x/exp/slog" - "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/log" diff --git a/op-e2e/devnet/devnet_test.go b/op-e2e/devnet/devnet_test.go index f8bbf865c1..2a9b4be8aa 100644 --- a/op-e2e/devnet/devnet_test.go +++ b/op-e2e/devnet/devnet_test.go @@ -2,6 +2,7 @@ package devnet import ( "context" + "log/slog" "testing" "time" @@ -10,7 +11,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "golang.org/x/exp/slog" ) func TestDevnet(t *testing.T) { diff --git a/op-e2e/e2eutils/geth/geth.go b/op-e2e/e2eutils/geth/geth.go index d79900bf71..ee03b82c15 100644 --- a/op-e2e/e2eutils/geth/geth.go +++ b/op-e2e/e2eutils/geth/geth.go @@ -3,11 +3,13 @@ package geth import ( "fmt" "math/big" + "time" "github.com/ethereum-optimism/optimism/op-service/clock" "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/txpool/blobpool" "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/eth/catalyst" @@ -31,6 +33,15 @@ func InitL1(chainID uint64, blockTime uint64, finalizedDistance uint64, genesis Datacap: blobpool.DefaultConfig.Datacap, PriceBump: blobpool.DefaultConfig.PriceBump, }, + StateScheme: rawdb.HashScheme, + Miner: miner.Config{ + PendingFeeRecipient: common.Address{}, + ExtraData: nil, + GasCeil: 0, + GasPrice: nil, + // enough to build blocks within 1 second, but high enough to avoid unnecessary test CPU cycles. + Recommit: time.Millisecond * 400, + }, } nodeConfig := &node.Config{ Name: "l1-geth", @@ -46,8 +57,6 @@ func InitL1(chainID uint64, blockTime uint64, finalizedDistance uint64, genesis if err != nil { return nil, nil, err } - // Activate merge - l1Eth.Merger().FinalizePoS() // Instead of running a whole beacon node, we run this fake-proof-of-stake sidecar that sequences L1 blocks using the Engine API. l1Node.RegisterLifecycle(&fakePoS{ @@ -84,16 +93,16 @@ type GethOption func(ethCfg *ethconfig.Config, nodeCfg *node.Config) error // InitL2 inits a L2 geth node. func InitL2(name string, l2ChainID *big.Int, genesis *core.Genesis, jwtPath string, opts ...GethOption) (*node.Node, *eth.Ethereum, error) { ethConfig := ðconfig.Config{ - NetworkId: l2ChainID.Uint64(), - Genesis: genesis, + NetworkId: l2ChainID.Uint64(), + Genesis: genesis, + StateScheme: rawdb.HashScheme, Miner: miner.Config{ - Etherbase: common.Address{}, - ExtraData: nil, - GasFloor: 0, - GasCeil: 0, - GasPrice: nil, - Recommit: 0, - NewPayloadTimeout: 0, + PendingFeeRecipient: common.Address{}, + ExtraData: nil, + GasCeil: 0, + GasPrice: nil, + // enough to build blocks within 1 second, but high enough to avoid unnecessary test CPU cycles. + Recommit: time.Millisecond * 400, }, } nodeConfig := defaultNodeConfig(fmt.Sprintf("l2-geth-%v", name), jwtPath) @@ -110,6 +119,7 @@ func createGethNode(l2 bool, nodeCfg *node.Config, ethCfg *ethconfig.Config, opt return nil, nil, fmt.Errorf("failed to apply geth option %d: %w", i, err) } } + ethCfg.StateScheme = rawdb.HashScheme ethCfg.NoPruning = true // force everything to be an archive node n, err := node.New(nodeCfg) if err != nil { diff --git a/op-e2e/e2eutils/transactions/blobs.go b/op-e2e/e2eutils/transactions/blobs.go index 980c357a1b..e176ca7c91 100644 --- a/op-e2e/e2eutils/transactions/blobs.go +++ b/op-e2e/e2eutils/transactions/blobs.go @@ -8,14 +8,14 @@ import ( ) var ( - emptyBlob kzg4844.Blob + emptyBlob *kzg4844.Blob emptyBlobCommit kzg4844.Commitment emptyBlobProof kzg4844.Proof ) func init() { var err error - emptyBlob = kzg4844.Blob{} + emptyBlob = &kzg4844.Blob{} emptyBlobCommit, err = kzg4844.BlobToCommitment(emptyBlob) if err != nil { panic("failed to create empty blob commitment: " + err.Error()) @@ -30,7 +30,7 @@ func init() { // https://github.com/ethereum/go-ethereum/commit/2a6beb6a39d7cb3c5906dd4465d65da6efcc73cd func CreateEmptyBlobTx(withSidecar bool, chainID uint64) *types.BlobTx { sidecar := &types.BlobTxSidecar{ - Blobs: []kzg4844.Blob{emptyBlob}, + Blobs: []kzg4844.Blob{*emptyBlob}, Commitments: []kzg4844.Commitment{emptyBlobCommit}, Proofs: []kzg4844.Proof{emptyBlobProof}, } diff --git a/op-e2e/external_geth/main.go b/op-e2e/external_geth/main.go index f68fbd073b..c97061d868 100644 --- a/op-e2e/external_geth/main.go +++ b/op-e2e/external_geth/main.go @@ -111,6 +111,7 @@ func initialize(binPath string, config external.Config) error { cmd := exec.Command( binPath, "--datadir", config.DataDir, + "--state.scheme=hash", "init", config.GenesisPath, ) return cmd.Run() @@ -146,6 +147,7 @@ func execute(binPath string, config external.Config) (*gethSession, error) { "--ws.port", "0", "--ws.api", "debug,eth,txpool,net,engine", "--syncmode=full", + "--state.scheme=hash", "--nodiscover", "--port", "0", "--maxpeers", "0", diff --git a/op-node/p2p/pings_test.go b/op-node/p2p/pings_test.go index 75aa6fd935..f1dbb60446 100644 --- a/op-node/p2p/pings_test.go +++ b/op-node/p2p/pings_test.go @@ -3,6 +3,7 @@ package p2p import ( "context" "errors" + "log/slog" "sync/atomic" "testing" "time" @@ -10,7 +11,6 @@ import ( "github.com/libp2p/go-libp2p/core/peer" "github.com/libp2p/go-libp2p/p2p/protocol/ping" "github.com/stretchr/testify/require" - "golang.org/x/exp/slog" "github.com/ethereum-optimism/optimism/op-service/clock" "github.com/ethereum-optimism/optimism/op-service/testlog" diff --git a/op-node/rollup/chain_spec_test.go b/op-node/rollup/chain_spec_test.go index f42cd30ec6..231aca92bc 100644 --- a/op-node/rollup/chain_spec_test.go +++ b/op-node/rollup/chain_spec_test.go @@ -1,6 +1,7 @@ package rollup import ( + "log/slog" "math/big" "testing" @@ -8,7 +9,6 @@ import ( "github.com/ethereum-optimism/optimism/op-service/testlog" "github.com/ethereum/go-ethereum/common" "github.com/stretchr/testify/require" - "golang.org/x/exp/slog" ) func u64ptr(n uint64) *uint64 { diff --git a/op-node/rollup/derive/batch_test.go b/op-node/rollup/derive/batch_test.go index 3dc554a593..9e48f265d7 100644 --- a/op-node/rollup/derive/batch_test.go +++ b/op-node/rollup/derive/batch_test.go @@ -6,12 +6,11 @@ import ( "math/rand" "testing" - "github.com/stretchr/testify/require" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/rlp" + "github.com/stretchr/testify/require" "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-service/eth" diff --git a/op-node/rollup/derive/batch_test_utils.go b/op-node/rollup/derive/batch_test_utils.go index 3b931cc4f0..5783b5ec39 100644 --- a/op-node/rollup/derive/batch_test_utils.go +++ b/op-node/rollup/derive/batch_test_utils.go @@ -21,7 +21,7 @@ func RandomSingularBatch(rng *rand.Rand, txCount int, chainID *big.Int) *Singula if err != nil { panic("tx Marshal binary" + err.Error()) } - txsEncoded = append(txsEncoded, hexutil.Bytes(txEncoded)) + txsEncoded = append(txsEncoded, txEncoded) } return &SingularBatch{ ParentHash: testutils.RandomHash(rng), diff --git a/op-node/rollup/derive/channel_out_test.go b/op-node/rollup/derive/channel_out_test.go index 0c82bbb989..e2eda7344e 100644 --- a/op-node/rollup/derive/channel_out_test.go +++ b/op-node/rollup/derive/channel_out_test.go @@ -63,10 +63,11 @@ func TestChannelOutAddBlock(t *testing.T) { cout := tcase.ChannelOut(t, &rollupCfg) header := &types.Header{Number: big.NewInt(1), Difficulty: big.NewInt(100)} block := types.NewBlockWithHeader(header).WithBody( - []*types.Transaction{ - types.NewTx(&types.DynamicFeeTx{}), + types.Body{ + Transactions: []*types.Transaction{ + types.NewTx(&types.DynamicFeeTx{}), + }, }, - nil, ) err := cout.AddBlock(&rollupCfg, block) require.Error(t, err) diff --git a/op-node/rollup/derive/fuzz_parsers_test.go b/op-node/rollup/derive/fuzz_parsers_test.go index 4054eb7f23..95ce94bc7c 100644 --- a/op-node/rollup/derive/fuzz_parsers_test.go +++ b/op-node/rollup/derive/fuzz_parsers_test.go @@ -5,6 +5,7 @@ import ( "math/big" "testing" + "github.com/ethereum/go-ethereum/core/tracing" "github.com/google/go-cmp/cmp" "github.com/holiman/uint256" "github.com/stretchr/testify/require" @@ -234,7 +235,7 @@ func FuzzUnmarshallLogEvent(f *testing.F) { // Set the EVM state up once to fuzz against state, err := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()), nil) require.NoError(f, err) - state.SetBalance(from, uint256.MustFromBig(BytesToBigInt([]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}))) + state.SetBalance(from, uint256.MustFromBig(BytesToBigInt([]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff})), tracing.BalanceChangeUnspecified) _, addr, _, err := runtime.Create(common.FromHex(bindings.OptimismPortalMetaData.Bin), &runtime.Config{ Origin: from, State: state, diff --git a/op-node/rollup/derive/span_batch_tx.go b/op-node/rollup/derive/span_batch_tx.go index cd0a471ab2..5f5bffb02b 100644 --- a/op-node/rollup/derive/span_batch_tx.go +++ b/op-node/rollup/derive/span_batch_tx.go @@ -175,7 +175,7 @@ func (tx *spanBatchTx) convertToFullTx(nonce, gas uint64, to *common.Address, ch } // newSpanBatchTx converts types.Transaction to spanBatchTx -func newSpanBatchTx(tx types.Transaction) (*spanBatchTx, error) { +func newSpanBatchTx(tx *types.Transaction) (*spanBatchTx, error) { var inner spanBatchTxData switch tx.Type() { case types.LegacyTxType: diff --git a/op-node/rollup/derive/span_batch_tx_test.go b/op-node/rollup/derive/span_batch_tx_test.go index c846f65812..55a9101da5 100644 --- a/op-node/rollup/derive/span_batch_tx_test.go +++ b/op-node/rollup/derive/span_batch_tx_test.go @@ -39,7 +39,7 @@ func TestSpanBatchTxConvert(t *testing.T) { tx := testCase.mkTx(rng, signer) v, r, s := tx.RawSignatureValues() - sbtx, err := newSpanBatchTx(*tx) + sbtx, err := newSpanBatchTx(tx) require.NoError(t, err) tx2, err := sbtx.convertToFullTx(tx.Nonce(), tx.Gas(), tx.To(), chainID, v, r, s) @@ -77,7 +77,7 @@ func TestSpanBatchTxRoundTrip(t *testing.T) { for txIdx := 0; txIdx < testCase.trials; txIdx++ { tx := testCase.mkTx(rng, signer) - sbtx, err := newSpanBatchTx(*tx) + sbtx, err := newSpanBatchTx(tx) require.NoError(t, err) sbtxEncoded, err := sbtx.MarshalBinary() @@ -100,7 +100,7 @@ func (txData *spanBatchDummyTxData) txType() byte { return types.DepositTxType } func TestSpanBatchTxInvalidTxType(t *testing.T) { // span batch never contain deposit tx depositTx := types.NewTx(&types.DepositTx{}) - _, err := newSpanBatchTx(*depositTx) + _, err := newSpanBatchTx(depositTx) require.ErrorContains(t, err, "invalid tx type") var sbtx spanBatchTx diff --git a/op-node/rollup/derive/span_batch_txs.go b/op-node/rollup/derive/span_batch_txs.go index 305aafefe9..e4bc73d0f9 100644 --- a/op-node/rollup/derive/span_batch_txs.go +++ b/op-node/rollup/derive/span_batch_txs.go @@ -424,7 +424,7 @@ func (sbtx *spanBatchTxs) AddTxs(txs [][]byte, chainID *big.Int) error { totalBlockTxCount := uint64(len(txs)) offset := sbtx.totalBlockTxCount for idx := 0; idx < int(totalBlockTxCount); idx++ { - var tx types.Transaction + tx := &types.Transaction{} if err := tx.UnmarshalBinary(txs[idx]); err != nil { return errors.New("failed to decode tx") } diff --git a/op-node/rollup/derive/test/random.go b/op-node/rollup/derive/test/random.go index 57ad0d8d95..ba9600da8c 100644 --- a/op-node/rollup/derive/test/random.go +++ b/op-node/rollup/derive/test/random.go @@ -16,7 +16,8 @@ import ( // RandomL2Block returns a random block whose first transaction is a random pre-Ecotone upgrade // L1 Info Deposit transaction. func RandomL2Block(rng *rand.Rand, txCount int, t time.Time) (*types.Block, []*types.Receipt) { - l1Block := types.NewBlock(testutils.RandomHeader(rng), nil, nil, nil, trie.NewStackTrie(nil)) + body := types.Body{} + l1Block := types.NewBlock(testutils.RandomHeader(rng), &body, nil, trie.NewStackTrie(nil)) rollupCfg := rollup.Config{} if testutils.RandomBool(rng) { t := uint64(0) @@ -45,5 +46,5 @@ func RandomL2BlockWithChainIdAndTime(rng *rand.Rand, txCount int, chainId *big.I for i := 0; i < txCount; i++ { txs = append(txs, testutils.RandomTx(rng, big.NewInt(int64(rng.Uint32())), signer)) } - return block.WithBody(txs, nil) + return block.WithBody(types.Body{Transactions: txs}) } diff --git a/op-node/rollup/event/tracer_log.go b/op-node/rollup/event/tracer_log.go index 483fb97813..a699df2e29 100644 --- a/op-node/rollup/event/tracer_log.go +++ b/op-node/rollup/event/tracer_log.go @@ -1,10 +1,9 @@ package event import ( + "log/slog" "time" - "golang.org/x/exp/slog" - "github.com/ethereum/go-ethereum/log" ) diff --git a/op-program/client/l2/db.go b/op-program/client/l2/db.go index 018b79ed93..3dfa5ec0d6 100644 --- a/op-program/client/l2/db.go +++ b/op-program/client/l2/db.go @@ -74,7 +74,7 @@ func (o *OracleKeyValueStore) Delete(key []byte) error { panic("not supported") } -func (o *OracleKeyValueStore) Stat(property string) (string, error) { +func (o *OracleKeyValueStore) Stat() (string, error) { panic("not supported") } diff --git a/op-program/client/l2/db_test.go b/op-program/client/l2/db_test.go index 00b70c810d..c85f99e2c5 100644 --- a/op-program/client/l2/db_test.go +++ b/op-program/client/l2/db_test.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" @@ -130,12 +131,12 @@ func TestUpdateState(t *testing.T) { statedb, err := state.New(genesisBlock.Root(), state.NewDatabase(rawdb.NewDatabase(db)), nil) require.NoError(t, err) - statedb.SetBalance(userAccount, uint256.NewInt(50)) + statedb.SetBalance(userAccount, uint256.NewInt(50), tracing.BalanceChangeUnspecified) require.Equal(t, uint256.NewInt(50), statedb.GetBalance(userAccount)) statedb.SetNonce(userAccount, uint64(5)) require.Equal(t, uint64(5), statedb.GetNonce(userAccount)) - statedb.SetBalance(unknownAccount, uint256.NewInt(60)) + statedb.SetBalance(unknownAccount, uint256.NewInt(60), tracing.BalanceChangeUnspecified) require.Equal(t, uint256.NewInt(60), statedb.GetBalance(unknownAccount)) statedb.SetCode(codeAccount, []byte{1}) require.Equal(t, []byte{1}, statedb.GetCode(codeAccount)) diff --git a/op-program/client/l2/engine_test.go b/op-program/client/l2/engine_test.go index 18d9a4c26c..28c9f8006d 100644 --- a/op-program/client/l2/engine_test.go +++ b/op-program/client/l2/engine_test.go @@ -179,7 +179,10 @@ func createL2Block(t *testing.T, number int) *types.Block { Number: big.NewInt(int64(number)), BaseFee: big.NewInt(7), } - return types.NewBlock(header, []*types.Transaction{types.NewTx(tx)}, nil, nil, trie.NewStackTrie(nil)) + body := &types.Body{ + Transactions: []*types.Transaction{types.NewTx(tx)}, + } + return types.NewBlock(header, body, nil, trie.NewStackTrie(nil)) } type stubEngineBackend struct { diff --git a/op-program/client/l2/engineapi/block_processor.go b/op-program/client/l2/engineapi/block_processor.go index d81212db20..9e56445f55 100644 --- a/op-program/client/l2/engineapi/block_processor.go +++ b/op-program/client/l2/engineapi/block_processor.go @@ -124,7 +124,11 @@ func (b *BlockProcessor) AddTx(tx *types.Transaction) error { } func (b *BlockProcessor) Assemble() (*types.Block, error) { - return b.dataProvider.Engine().FinalizeAndAssemble(b.dataProvider, b.header, b.state, b.transactions, nil, b.receipts, nil) + body := types.Body{ + Transactions: b.transactions, + } + + return b.dataProvider.Engine().FinalizeAndAssemble(b.dataProvider, b.header, b.state, &body, b.receipts) } func (b *BlockProcessor) Commit() error { diff --git a/op-program/client/l2/oracle.go b/op-program/client/l2/oracle.go index 6aa049e159..0563079a83 100644 --- a/op-program/client/l2/oracle.go +++ b/op-program/client/l2/oracle.go @@ -66,7 +66,7 @@ func (p *PreimageOracle) BlockByHash(blockHash common.Hash) *types.Block { header := p.headerByBlockHash(blockHash) txs := p.LoadTransactions(blockHash, header.TxHash) - return types.NewBlockWithHeader(header).WithBody(txs, nil) + return types.NewBlockWithHeader(header).WithBody(types.Body{Transactions: txs}) } func (p *PreimageOracle) LoadTransactions(blockHash common.Hash, txHash common.Hash) []*types.Transaction { diff --git a/op-program/client/mpt/db.go b/op-program/client/mpt/db.go index fe9e234cf2..5d9e9147ce 100644 --- a/op-program/client/mpt/db.go +++ b/op-program/client/mpt/db.go @@ -31,7 +31,7 @@ func (p DB) Delete(key []byte) error { return nil } -func (p DB) Stat(property string) (string, error) { +func (p DB) Stat() (string, error) { panic("not supported") } diff --git a/op-service/client/http_test.go b/op-service/client/http_test.go index 60fd9fd987..df84e48299 100644 --- a/op-service/client/http_test.go +++ b/op-service/client/http_test.go @@ -2,13 +2,12 @@ package client import ( "context" + "log/slog" "net/http" "net/http/httptest" "net/url" "testing" - "golang.org/x/exp/slog" - "github.com/ethereum-optimism/optimism/op-service/testlog" "github.com/stretchr/testify/require" ) diff --git a/op-service/crypto/signature.go b/op-service/crypto/signature.go index c0abd3ef2a..0b0afc02ec 100644 --- a/op-service/crypto/signature.go +++ b/op-service/crypto/signature.go @@ -91,6 +91,9 @@ func SignerFactoryFromConfig(l log.Logger, privateKey, mnemonic, hdPath string, return nil, common.Address{}, fmt.Errorf("failed to parse the private key: %w", err) } } + // we force the curve to Geth's instance, because Geth does an equality check in the nocgo version: + // https://github.com/ethereum/go-ethereum/blob/723b1e36ad6a9e998f06f74cc8b11d51635c6402/crypto/signature_nocgo.go#L82 + privKey.PublicKey.Curve = crypto.S256() fromAddress = crypto.PubkeyToAddress(privKey.PublicKey) signer = func(chainID *big.Int) SignerFn { s := PrivateKeySignerFn(privKey, chainID) diff --git a/op-service/crypto/signature_test.go b/op-service/crypto/signature_test.go new file mode 100644 index 0000000000..1cd52165bf --- /dev/null +++ b/op-service/crypto/signature_test.go @@ -0,0 +1,56 @@ +package crypto + +import ( + "context" + "math/big" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/ethereum-optimism/optimism/op-service/signer" + "github.com/ethereum-optimism/optimism/op-service/testlog" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" +) + +// should be run with CGO_ENABLED=0 + +func TestSignerFactoryFromMnemonic(t *testing.T) { + mnemonic := "test test test test test test test test test test test junk" + hdPath := "m/44'/60'/0'/0/1" + testSigner(t, "", mnemonic, hdPath, signer.CLIConfig{}) +} + +func TestSignerFactoryFromKey(t *testing.T) { + priv := "59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d" + testSigner(t, priv, "", "", signer.CLIConfig{}) +} + +func testSigner(t *testing.T, priv, mnemonic, hdPath string, cfg signer.CLIConfig) { + logger := testlog.Logger(t, log.LevelDebug) + + factoryFn, addr, err := SignerFactoryFromConfig(logger, priv, mnemonic, hdPath, cfg) + require.NoError(t, err) + expectedAddr := common.HexToAddress("0x70997970C51812dc3A010C7d01b50e0d17dc79C8") + require.Equal(t, expectedAddr, addr) + chainID := big.NewInt(10) + signerFn := factoryFn(chainID) // for chain ID 10 + tx := types.NewTx(&types.DynamicFeeTx{ + ChainID: chainID, + Nonce: 0, + GasTipCap: big.NewInt(1), + GasFeeCap: big.NewInt(1), + Gas: 21000, + To: nil, + Value: big.NewInt(0), + Data: []byte("test"), + }) + signedTx, err := signerFn(context.Background(), addr, tx) + require.NoError(t, err) + gethSigner := types.LatestSignerForChainID(chainID) + sender, err := gethSigner.Sender(signedTx) + require.NoError(t, err) + require.Equal(t, expectedAddr, sender) +} diff --git a/op-service/dial/rollup_sync_test.go b/op-service/dial/rollup_sync_test.go index 1d3898e8fd..9ed3e2a39b 100644 --- a/op-service/dial/rollup_sync_test.go +++ b/op-service/dial/rollup_sync_test.go @@ -3,6 +3,7 @@ package dial import ( "context" "errors" + "log/slog" "testing" "time" @@ -10,7 +11,6 @@ import ( "github.com/ethereum-optimism/optimism/op-service/testlog" "github.com/ethereum-optimism/optimism/op-service/testutils" "github.com/stretchr/testify/require" - "golang.org/x/exp/slog" ) func TestWaitRollupSync(t *testing.T) { diff --git a/op-service/eth/blob.go b/op-service/eth/blob.go index da871215da..9e51c56863 100644 --- a/op-service/eth/blob.go +++ b/op-service/eth/blob.go @@ -57,7 +57,7 @@ func (b *Blob) TerminalString() string { } func (b *Blob) ComputeKZGCommitment() (kzg4844.Commitment, error) { - return kzg4844.BlobToCommitment(*b.KZGBlob()) + return kzg4844.BlobToCommitment(b.KZGBlob()) } // KZGToVersionedHash computes the "blob hash" (a.k.a. versioned-hash) of a blob-commitment, as used in a blob-tx. @@ -70,7 +70,7 @@ func KZGToVersionedHash(commitment kzg4844.Commitment) (out common.Hash) { // VerifyBlobProof verifies that the given blob and proof corresponds to the given commitment, // returning error if the verification fails. func VerifyBlobProof(blob *Blob, commitment kzg4844.Commitment, proof kzg4844.Proof) error { - return kzg4844.VerifyBlobProof(*blob.KZGBlob(), commitment, proof) + return kzg4844.VerifyBlobProof(blob.KZGBlob(), commitment, proof) } // FromData encodes the given input data into this blob. The encoding scheme is as follows: diff --git a/op-service/log/cli.go b/op-service/log/cli.go index ab4718d5e4..2bd3c69300 100644 --- a/op-service/log/cli.go +++ b/op-service/log/cli.go @@ -3,11 +3,11 @@ package log import ( "fmt" "io" + "log/slog" "os" "strings" "github.com/urfave/cli/v2" - "golang.org/x/exp/slog" "golang.org/x/term" "github.com/ethereum/go-ethereum/log" diff --git a/op-service/log/dynamic.go b/op-service/log/dynamic.go index 72f23f505b..0259fb15b2 100644 --- a/op-service/log/dynamic.go +++ b/op-service/log/dynamic.go @@ -2,8 +2,7 @@ package log import ( "context" - - "golang.org/x/exp/slog" + "log/slog" ) type LvlSetter interface { diff --git a/op-service/log/dynamic_test.go b/op-service/log/dynamic_test.go index 3a992710b4..2507624636 100644 --- a/op-service/log/dynamic_test.go +++ b/op-service/log/dynamic_test.go @@ -2,10 +2,10 @@ package log import ( "context" + "log/slog" "testing" "github.com/stretchr/testify/require" - "golang.org/x/exp/slog" "github.com/ethereum/go-ethereum/log" ) diff --git a/op-service/log/writer.go b/op-service/log/writer.go index 0a17313830..e3c658d3a7 100644 --- a/op-service/log/writer.go +++ b/op-service/log/writer.go @@ -1,10 +1,9 @@ package log import ( + "log/slog" "sync" - "golang.org/x/exp/slog" - "github.com/ethereum/go-ethereum/log" ) diff --git a/op-service/log/writer_test.go b/op-service/log/writer_test.go index 2e9cf14b3a..274a2aa2a3 100644 --- a/op-service/log/writer_test.go +++ b/op-service/log/writer_test.go @@ -2,10 +2,10 @@ package log_test import ( "io" + "log/slog" "testing" "github.com/stretchr/testify/require" - "golang.org/x/exp/slog" "github.com/ethereum/go-ethereum/log" diff --git a/op-service/sources/batching/bound.go b/op-service/sources/batching/bound.go index 33e19c3dfb..75a2a3f12a 100644 --- a/op-service/sources/batching/bound.go +++ b/op-service/sources/batching/bound.go @@ -43,11 +43,11 @@ func (b *BoundContract) DecodeCall(data []byte) (string, *CallResult, error) { method, err := b.abi.MethodById(data[:4]) if err != nil { // ABI doesn't return a nicely typed error so treat any failure to find the method as unknown - return "", nil, fmt.Errorf("%w: %v", ErrUnknownMethod, err.Error()) + return "", nil, fmt.Errorf("%w: %w", ErrUnknownMethod, err) } args, err := method.Inputs.Unpack(data[4:]) if err != nil { - return "", nil, fmt.Errorf("%w: %v", ErrInvalidCall, err.Error()) + return "", nil, fmt.Errorf("%w: %w", ErrInvalidCall, err) } return method.Name, &CallResult{args}, nil } @@ -58,7 +58,7 @@ func (b *BoundContract) DecodeEvent(log *types.Log) (string, *CallResult, error) } event, err := b.abi.EventByID(log.Topics[0]) if err != nil { - return "", nil, fmt.Errorf("%w: %v", ErrUnknownEvent, err.Error()) + return "", nil, fmt.Errorf("%w: %w", ErrUnknownEvent, err) } argsMap := make(map[string]interface{}) @@ -69,13 +69,13 @@ func (b *BoundContract) DecodeEvent(log *types.Log) (string, *CallResult, error) } } if err := abi.ParseTopicsIntoMap(argsMap, indexed, log.Topics[1:]); err != nil { - return "", nil, fmt.Errorf("%w indexed topics: %v", ErrInvalidEvent, err.Error()) + return "", nil, fmt.Errorf("%w indexed topics: %w", ErrInvalidEvent, err) } nonIndexed := event.Inputs.NonIndexed() if len(nonIndexed) > 0 { if err := nonIndexed.UnpackIntoMap(argsMap, log.Data); err != nil { - return "", nil, fmt.Errorf("%w non-indexed topics: %v", ErrInvalidEvent, err.Error()) + return "", nil, fmt.Errorf("%w non-indexed topics: %w", ErrInvalidEvent, err) } } args := make([]interface{}, 0, len(event.Inputs)) diff --git a/op-service/sources/l1_beacon_client_test.go b/op-service/sources/l1_beacon_client_test.go index ef4ede18c6..086cb0f9da 100644 --- a/op-service/sources/l1_beacon_client_test.go +++ b/op-service/sources/l1_beacon_client_test.go @@ -25,8 +25,8 @@ func makeTestBlobSidecar(index uint64) (eth.IndexedBlobHash, *eth.BlobSidecar) { // make first byte of test blob match its index so we can easily verify if is returned in the // expected order blob[0] = byte(index) - commit, _ := kzg4844.BlobToCommitment(blob) - proof, _ := kzg4844.ComputeBlobProof(blob, commit) + commit, _ := kzg4844.BlobToCommitment(&blob) + proof, _ := kzg4844.ComputeBlobProof(&blob, commit) hash := eth.KZGToVersionedHash(commit) idh := eth.IndexedBlobHash{ diff --git a/op-service/sources/rollupclient.go b/op-service/sources/rollupclient.go index 14c38d35b4..acd0f84b39 100644 --- a/op-service/sources/rollupclient.go +++ b/op-service/sources/rollupclient.go @@ -2,10 +2,10 @@ package sources import ( "context" + "log/slog" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" - "golang.org/x/exp/slog" "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-service/client" diff --git a/op-service/testlog/capturing.go b/op-service/testlog/capturing.go index 6e1edb09b5..28a8a49260 100644 --- a/op-service/testlog/capturing.go +++ b/op-service/testlog/capturing.go @@ -2,10 +2,9 @@ package testlog import ( "context" + "log/slog" "strings" - "golang.org/x/exp/slog" - "github.com/ethereum/go-ethereum/log" ) diff --git a/op-service/testlog/testlog.go b/op-service/testlog/testlog.go index 0ff5442255..fe7ede207c 100644 --- a/op-service/testlog/testlog.go +++ b/op-service/testlog/testlog.go @@ -21,14 +21,13 @@ import ( "bufio" "bytes" "context" + "log/slog" "os" "runtime" "strconv" "strings" "sync" - "golang.org/x/exp/slog" - "github.com/ethereum/go-ethereum/log" ) diff --git a/op-service/testutils/random.go b/op-service/testutils/random.go index f065d25837..a3021ad463 100644 --- a/op-service/testutils/random.go +++ b/op-service/testutils/random.go @@ -299,7 +299,10 @@ func RandomBlockPrependTxsWithTime(rng *rand.Rand, txCount int, t uint64, ptxs . } header.GasUsed = cumulativeGasUsed header.GasLimit = cumulativeGasUsed + uint64(rng.Int63n(int64(cumulativeGasUsed))) - block := types.NewBlock(header, txs, nil, receipts, trie.NewStackTrie(nil)) + body := types.Body{ + Transactions: txs, + } + block := types.NewBlock(header, &body, receipts, trie.NewStackTrie(nil)) logIndex := uint(0) for i, r := range receipts { r.BlockHash = block.Hash() diff --git a/op-service/txmgr/txmgr.go b/op-service/txmgr/txmgr.go index 72ef1d1c75..602ed863a7 100644 --- a/op-service/txmgr/txmgr.go +++ b/op-service/txmgr/txmgr.go @@ -326,8 +326,8 @@ func MakeSidecar(blobs []*eth.Blob) (*types.BlobTxSidecar, []common.Hash, error) sidecar := &types.BlobTxSidecar{} blobHashes := make([]common.Hash, 0, len(blobs)) for i, blob := range blobs { - rawBlob := *blob.KZGBlob() - sidecar.Blobs = append(sidecar.Blobs, rawBlob) + rawBlob := blob.KZGBlob() + sidecar.Blobs = append(sidecar.Blobs, *rawBlob) commitment, err := kzg4844.BlobToCommitment(rawBlob) if err != nil { return nil, nil, fmt.Errorf("cannot compute KZG commitment of blob %d in tx candidate: %w", i, err) diff --git a/op-service/txmgr/txmgr_test.go b/op-service/txmgr/txmgr_test.go index 330f2482b1..0b1ad933b3 100644 --- a/op-service/txmgr/txmgr_test.go +++ b/op-service/txmgr/txmgr_test.go @@ -564,7 +564,7 @@ func TestTxMgr_CraftBlobTx(t *testing.T) { // verify the blobs for i := range sidecar.Blobs { - require.NoError(t, kzg4844.VerifyBlobProof(sidecar.Blobs[i], sidecar.Commitments[i], sidecar.Proofs[i])) + require.NoError(t, kzg4844.VerifyBlobProof(&sidecar.Blobs[i], sidecar.Commitments[i], sidecar.Proofs[i])) } b1 := eth.Blob(sidecar.Blobs[0]) d1, err := b1.ToData() diff --git a/op-wheel/cheat/cheat.go b/op-wheel/cheat/cheat.go index 61c8d74d09..26138dfc28 100644 --- a/op-wheel/cheat/cheat.go +++ b/op-wheel/cheat/cheat.go @@ -10,6 +10,7 @@ import ( "path/filepath" "strings" + "github.com/ethereum/go-ethereum/core/tracing" "github.com/holiman/uint256" "github.com/ethereum/go-ethereum/common" @@ -337,7 +338,7 @@ func StoragePatch(patch io.Reader, address common.Address) HeadFn { func SetBalance(addr common.Address, amount *big.Int) HeadFn { return func(_ *types.Header, headState *state.StateDB) error { - headState.SetBalance(addr, uint256.MustFromBig(amount)) + headState.SetBalance(addr, uint256.MustFromBig(amount), tracing.BalanceChangeUnspecified) return nil } } diff --git a/op-wheel/cmd/main.go b/op-wheel/cmd/main.go index 03d29c72c0..9da15270ed 100644 --- a/op-wheel/cmd/main.go +++ b/op-wheel/cmd/main.go @@ -31,9 +31,9 @@ func main() { oplog.SetGlobalLogHandler(log.NewTerminalHandlerWithLevel(os.Stdout, lvl, true)) return nil } - app.Action = cli.ActionFunc(func(c *cli.Context) error { + app.Action = func(c *cli.Context) error { return errors.New("see 'cheat' and 'engine' subcommands and --help") - }) + } app.Writer = os.Stdout app.ErrWriter = os.Stderr app.Commands = []*cli.Command{ diff --git a/op-wheel/engine/engine.go b/op-wheel/engine/engine.go index f76fc753ac..bd834ec032 100644 --- a/op-wheel/engine/engine.go +++ b/op-wheel/engine/engine.go @@ -44,7 +44,7 @@ func getBlock(ctx context.Context, client client.RPC, method string, tag string) if err != nil { return nil, err } - return types.NewBlockWithHeader(&bl.Header).WithBody(bl.Transactions, nil), nil + return types.NewBlockWithHeader(&bl.Header).WithBody(types.Body{Transactions: bl.Transactions}), nil } func getHeader(ctx context.Context, client client.RPC, method string, tag string) (*types.Header, error) { diff --git a/ops-bedrock/l1-geth.Dockerfile b/ops-bedrock/l1-geth.Dockerfile index 988d79bec0..51c4933026 100644 --- a/ops-bedrock/l1-geth.Dockerfile +++ b/ops-bedrock/l1-geth.Dockerfile @@ -1,4 +1,4 @@ -FROM ethereum/client-go:v1.13.15 +FROM ethereum/client-go:v1.14.7 RUN apk add --no-cache jq bash From 94b7e03b209cbfd5018482216f5be9594b81dc34 Mon Sep 17 00:00:00 2001 From: mbaxter Date: Fri, 9 Aug 2024 13:41:24 -0400 Subject: [PATCH 19/29] cannon: Undo changes to memprofile patching (#11420) --- cannon/mipsevm/program/patch.go | 6 +++++- op-program/client/cmd/main.go | 8 -------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/cannon/mipsevm/program/patch.go b/cannon/mipsevm/program/patch.go index b26aa4d65b..c845488dd7 100644 --- a/cannon/mipsevm/program/patch.go +++ b/cannon/mipsevm/program/patch.go @@ -47,12 +47,16 @@ func PatchGo(f *elf.File, st mipsevm.FPVMState) error { })); err != nil { return fmt.Errorf("failed to patch Go runtime.gcenable: %w", err) } + case "runtime.MemProfileRate": + if err := st.GetMemory().SetMemoryRange(uint32(s.Value), bytes.NewReader(make([]byte, 4))); err != nil { // disable mem profiling, to avoid a lot of unnecessary floating point ops + return err + } } } return nil } -// TODO(cp-903) Consider setting envar "GODEBUG=memprofilerate=0" for go programs to disable memprofiling +// TODO(cp-903) Consider setting envar "GODEBUG=memprofilerate=0" for go programs to disable memprofiling, instead of patching it out in PatchGo() func PatchStack(st mipsevm.FPVMState) error { // setup stack pointer sp := uint32(0x7f_ff_d0_00) diff --git a/op-program/client/cmd/main.go b/op-program/client/cmd/main.go index ec65769847..d075083e5a 100644 --- a/op-program/client/cmd/main.go +++ b/op-program/client/cmd/main.go @@ -2,7 +2,6 @@ package main import ( "os" - "runtime" "github.com/ethereum/go-ethereum/log" @@ -10,13 +9,6 @@ import ( oplog "github.com/ethereum-optimism/optimism/op-service/log" ) -var _ = func() bool { - // Disable mem profiling, to avoid a lot of unnecessary floating point ops - // TODO(cp-903) Consider cutting this in favor patching envar "GODEBUG=memprofilerate=0" into cannon go programs - runtime.MemProfileRate = 0 - return true -}() - func main() { // Default to a machine parsable but relatively human friendly log format. // Don't do anything fancy to detect if color output is supported. From cdfe8a838825507db0e253961b77f799d0723b81 Mon Sep 17 00:00:00 2001 From: smartcontracts Date: Fri, 9 Aug 2024 15:07:57 -0400 Subject: [PATCH 20/29] fix: update contracts README diagram (#11406) --- packages/contracts-bedrock/README.md | 59 +++++++++++++++++----------- 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/packages/contracts-bedrock/README.md b/packages/contracts-bedrock/README.md index ad7edb5065..2e01cc3606 100644 --- a/packages/contracts-bedrock/README.md +++ b/packages/contracts-bedrock/README.md @@ -55,51 +55,66 @@ graph LR L1StandardBridge(L1StandardBridge) L1ERC721Bridge(L1ERC721Bridge) L1CrossDomainMessenger(L1CrossDomainMessenger) - L2OutputOracle(L2OutputOracle) OptimismPortal(OptimismPortal) SuperchainConfig(SuperchainConfig) SystemConfig(SystemConfig) + DisputeGameFactory(DisputeGameFactory) + FaultDisputeGame(FaultDisputeGame) + AnchorStateRegistry(AnchorStateRegistry) + DelayedWETH(DelayedWETH) end - subgraph "User Interactions" + subgraph "User Interactions (Permissionless)" Users(Users) + Challengers(Challengers) end subgraph "System Interactions" - Batcher(Batcher) - Proposer(Proposer) Guardian(Guardian) + Batcher(Batcher) end subgraph "Layer 2 Interactions" L2Nodes(Layer 2 Nodes) end + L2Nodes -.->|fetch transaction batches| BatchDataEOA + L2Nodes -.->|fetch deposit events| OptimismPortal + Batcher -->|publish transaction batches| BatchDataEOA - Proposer -->|propose state outputs| L2OutputOracle - Guardian -->|remove invalid state outputs| L2OutputOracle - ExternalERC20 <-->|mint/burn/transfer| L1StandardBridge - ExternalERC721 <-->|mint/burn/transfer| L1ERC721Bridge + ExternalERC20 <-->|mint/burn/transfer tokens| L1StandardBridge + ExternalERC721 <-->|mint/burn/transfer tokens| L1ERC721Bridge - L1StandardBridge <-->|send/receive message| L1CrossDomainMessenger - L1ERC721Bridge <-->|send/receive message| L1CrossDomainMessenger - L1CrossDomainMessenger <-->|package/send/receive message| OptimismPortal + L1StandardBridge <-->|send/receive messages| L1CrossDomainMessenger L1StandardBridge -.->|query pause state| SuperchainConfig + + L1ERC721Bridge <-->|send/receive messages| L1CrossDomainMessenger L1ERC721Bridge -.->|query pause state| SuperchainConfig + + L1CrossDomainMessenger <-->|send/receive messages| OptimismPortal L1CrossDomainMessenger -.->|query pause state| SuperchainConfig - OptimismPortal -.->|query pause state| SuperchainConfig + OptimismPortal -.->|query pause state| SuperchainConfig OptimismPortal -.->|query config| SystemConfig - OptimismPortal -.->|query proposed states| L2OutputOracle + OptimismPortal -.->|query state proposals| DisputeGameFactory - Users <-->|deposit/withdraw ETH/ERC20| L1StandardBridge - Users <-->|deposit/withdraw ERC721| L1ERC721Bridge - Users -->|prove/execute withdrawal transactions| OptimismPortal + DisputeGameFactory -->|generate instances| FaultDisputeGame - L2Nodes -.->|fetch transaction batches| BatchDataEOA - L2Nodes -.->|verify output roots| L2OutputOracle - L2Nodes -.->|fetch deposit events| OptimismPortal + FaultDisputeGame -->|store bonds| DelayedWETH + FaultDisputeGame -->|query/update anchor states| AnchorStateRegistry + + Users <-->|deposit/withdraw ETH/ERC20s| L1StandardBridge + Users <-->|deposit/withdraw ERC721s| L1ERC721Bridge + Users -->|prove/execute withdrawals| OptimismPortal + + Challengers -->|propose output roots| DisputeGameFactory + Challengers -->|verify/challenge/defend proposals| FaultDisputeGame + + Guardian -->|pause/unpause| SuperchainConfig + Guardian -->|safety net actions| OptimismPortal + Guardian -->|safety net actions| DisputeGameFactory + Guardian -->|safety net actions| DelayedWETH classDef extContracts stroke:#ff9,stroke-width:2px; classDef l1Contracts stroke:#bbf,stroke-width:2px; @@ -108,10 +123,10 @@ graph LR classDef systemUser stroke:#f9a,stroke-width:2px; classDef l2Nodes stroke:#333,stroke-width:2px class ExternalERC20,ExternalERC721 extContracts; - class L1StandardBridge,L1ERC721Bridge,L1CrossDomainMessenger,L2OutputOracle,OptimismPortal,SuperchainConfig,SystemConfig l1Contracts; + class L1StandardBridge,L1ERC721Bridge,L1CrossDomainMessenger,OptimismPortal,SuperchainConfig,SystemConfig,DisputeGameFactory,FaultDisputeGame,DelayedWETH,AnchorStateRegistry l1Contracts; class BatchDataEOA l1EOA; - class Users userInt; - class Batcher,Proposer,Guardian systemUser; + class Users,Challengers userInt; + class Batcher,Guardian systemUser; class L2Nodes l2Nodes; ``` From b1dfa22a71732bd3b1a52722fd0ea4f314d58fc4 Mon Sep 17 00:00:00 2001 From: Matt Solomon Date: Fri, 9 Aug 2024 12:51:25 -0700 Subject: [PATCH 21/29] fix(ctb): remove linked libraries from scripts and tests (#11426) * add additional address to exclude * chore: make public library methods internal * remove another public lib method * remove additional public lib methods * remove hardcoded assumption now that we know it's lib linking * style: forge fmt --- packages/contracts-bedrock/scripts/ForgeArtifacts.sol | 4 ++-- .../contracts-bedrock/src/cannon/libraries/MIPSSyscalls.sol | 2 +- .../contracts-bedrock/test/safe-tools/SafeTestTools.sol | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/contracts-bedrock/scripts/ForgeArtifacts.sol b/packages/contracts-bedrock/scripts/ForgeArtifacts.sol index 6731e9729a..9886f9cd9b 100644 --- a/packages/contracts-bedrock/scripts/ForgeArtifacts.sol +++ b/packages/contracts-bedrock/scripts/ForgeArtifacts.sol @@ -54,7 +54,7 @@ library ForgeArtifacts { } /// @notice Returns the storage layout for a deployed contract. - function getStorageLayout(string memory _name) public returns (string memory layout_) { + function getStorageLayout(string memory _name) internal returns (string memory layout_) { string[] memory cmd = new string[](3); cmd[0] = Executables.bash; cmd[1] = "-c"; @@ -64,7 +64,7 @@ library ForgeArtifacts { } /// @notice Returns the abi from a the forge artifact - function getAbi(string memory _name) public returns (string memory abi_) { + function getAbi(string memory _name) internal returns (string memory abi_) { string[] memory cmd = new string[](3); cmd[0] = Executables.bash; cmd[1] = "-c"; diff --git a/packages/contracts-bedrock/src/cannon/libraries/MIPSSyscalls.sol b/packages/contracts-bedrock/src/cannon/libraries/MIPSSyscalls.sol index da15b34995..1017f07f68 100644 --- a/packages/contracts-bedrock/src/cannon/libraries/MIPSSyscalls.sol +++ b/packages/contracts-bedrock/src/cannon/libraries/MIPSSyscalls.sol @@ -99,7 +99,7 @@ library MIPSSyscalls { uint32 internal constant SCHED_QUANTUM = 100_000; /// @notice Start of the data segment. - uint32 public constant BRK_START = 0x40000000; + uint32 internal constant BRK_START = 0x40000000; // SYS_CLONE flags uint32 internal constant CLONE_VM = 0x100; diff --git a/packages/contracts-bedrock/test/safe-tools/SafeTestTools.sol b/packages/contracts-bedrock/test/safe-tools/SafeTestTools.sol index 1c5a505095..34386f5e39 100644 --- a/packages/contracts-bedrock/test/safe-tools/SafeTestTools.sol +++ b/packages/contracts-bedrock/test/safe-tools/SafeTestTools.sol @@ -54,7 +54,7 @@ struct SafeInstance { library Sort { /// @dev Sorts an array of addresses in place - function sort(address[] memory arr) public pure returns (address[] memory) { + function sort(address[] memory arr) internal pure returns (address[] memory) { LibSort.sort(arr); return arr; } @@ -62,9 +62,9 @@ library Sort { library SafeTestLib { /// @dev The address of foundry's VM contract - address constant VM_ADDR = 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D; + address internal constant VM_ADDR = 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D; /// @dev The address of the first owner in the linked list of owners - address constant SENTINEL_OWNERS = address(0x1); + address internal constant SENTINEL_OWNERS = address(0x1); /// @dev Get the address from a private key function getAddr(uint256 pk) internal pure returns (address) { From 586e6626b3158f6291e276b4d6f04bb0076a1965 Mon Sep 17 00:00:00 2001 From: Matt Solomon Date: Fri, 9 Aug 2024 14:50:11 -0700 Subject: [PATCH 22/29] add rationale to comment (#11429) --- packages/contracts-bedrock/scripts/L2Genesis.s.sol | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/contracts-bedrock/scripts/L2Genesis.s.sol b/packages/contracts-bedrock/scripts/L2Genesis.s.sol index f68dd62328..cad18b0b02 100644 --- a/packages/contracts-bedrock/scripts/L2Genesis.s.sol +++ b/packages/contracts-bedrock/scripts/L2Genesis.s.sol @@ -186,7 +186,10 @@ contract L2Genesis is Deployer { /// The Proxy bytecode should be set. All proxied predeploys should have /// the 1967 admin slot set to the ProxyAdmin predeploy. All defined predeploys /// should have their implementations set. - /// Warning: the predeploy accounts have contract code, but 0 nonce value. + /// Warning: the predeploy accounts have contract code, but 0 nonce value, contrary + /// to the expected nonce of 1 per EIP-161. This is because the legacy go genesis + // script didn't set the nonce and we didn't want to change that behavior when + /// migrating genesis generation to Solidity. function setPredeployProxies() public { console.log("Setting Predeploy proxies"); bytes memory code = vm.getDeployedCode("Proxy.sol:Proxy"); From 261938e2a685af5a9b163b8fc54a7b0e893c5257 Mon Sep 17 00:00:00 2001 From: Sebastian Stammler Date: Sat, 10 Aug 2024 00:21:40 +0200 Subject: [PATCH 23/29] ci: manage versions in versions.json (#11415) * ci: manage versions in versions.json and optimize archive downloads to directly extract * ci: also pin just version --- .circleci/config.yml | 21 ++++++++++----------- versions.json | 5 ++++- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index acc32ae6dc..4a2fc96751 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -432,9 +432,9 @@ jobs: - run: name: Sign command: | - git clone https://github.com/ethereum-optimism/binary_signer - cd binary_signer/signer - git checkout tags/v1.0.3 + VER=$(jq -r .binary_signer < versions.json) + wget -O - "https://github.com/ethereum-optimism/binary_signer/archive/refs/tags/v${VER}.tar.gz" | tar xz + cd "binary_signer-${VER}/signer" IMAGE_PATH="<>/<>/<>:<>" echo $IMAGE_PATH @@ -1091,19 +1091,17 @@ jobs: - run: name: Install latest golang command: | - wget https://go.dev/dl/go1.21.1.linux-amd64.tar.gz + VER=$(jq -r .go < versions.json) sudo rm -rf /usr/local/go - sudo tar -C /usr/local -xzf go1.21.1.linux-amd64.tar.gz + wget "https://go.dev/dl/go${VER}.linux-amd64.tar.gz" -O - | sudo tar -C /usr/local -xz export PATH=$PATH:/usr/local/go/bin go version - run: name: Install Geth command: | - wget https://gethstore.blob.core.windows.net/builds/geth-alltools-linux-amd64-1.13.14-2bd6bd01.tar.gz - # geth only provides md5 sums sadly - echo '76a04354dba9980fcbc35bece2957b30 geth-alltools-linux-amd64-1.13.14-2bd6bd01.tar.gz' | md5sum -c - - tar -xzvf geth-alltools-linux-amd64-1.13.14-2bd6bd01.tar.gz - sudo cp geth-alltools-linux-amd64-1.13.14-2bd6bd01/* /usr/local/bin + VER=$(jq -r .geth_release < versions.json) + wget "https://gethstore.blob.core.windows.net/builds/geth-alltools-linux-amd64-${VER}.tar.gz" -O - | tar xz + sudo cp "geth-alltools-linux-amd64-${VER}"/* /usr/local/bin - run: name: Install eth2-testnet-genesis command: | @@ -1120,7 +1118,8 @@ jobs: - run: name: Install Just command: | - curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to $HOME/bin + VER=$(jq -r .just < versions.json) + curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to $HOME/bin --tag "${VER}" echo 'export PATH="${PATH}:$HOME/bin"' >> $BASH_ENV - install-contracts-dependencies - attach_workspace: diff --git a/versions.json b/versions.json index 4ae8f8b5ff..82c0c4931c 100644 --- a/versions.json +++ b/versions.json @@ -1,10 +1,13 @@ { + "go": "1.22.6", "abigen": "v1.10.25", "foundry": "626221f5ef44b4af950a08e09bd714650d9eb77d", "geth": "v1.14.7", + "geth_release": "1.14.7-aa55f5ea", "eth2_testnet_genesis": "v0.10.0", "nvm": "v20.9.0", "slither": "0.10.2", "kontrol": "0.1.316", - "just": "1.34.0" + "just": "1.34.0", + "binary_signer": "1.0.4" } From acd23f2eca54b01df2690579115d9c9ca2dd25f5 Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Sat, 10 Aug 2024 08:35:54 +1000 Subject: [PATCH 24/29] cannon: Add support for --type mt to enable multithreaded cannon (#11411) * cannon: Add support for --type mt to enable multithreaded cannon * cannon: Rename vm type to cannon-mt --- Makefile | 6 ++++++ cannon/cmd/load_elf.go | 29 +++++++++++++++++++++++++++-- cannon/cmd/run.go | 39 ++++++++++++++++++++++----------------- cannon/cmd/vmtype.go | 29 +++++++++++++++++++++++++++++ cannon/cmd/witness.go | 22 +++++++++++++++++++--- 5 files changed, 103 insertions(+), 22 deletions(-) create mode 100644 cannon/cmd/vmtype.go diff --git a/Makefile b/Makefile index 08842b6fea..4901e75693 100644 --- a/Makefile +++ b/Makefile @@ -141,6 +141,12 @@ cannon-prestate: op-program cannon ## Generates prestate using cannon and op-pro mv op-program/bin/0.json op-program/bin/prestate-proof.json .PHONY: cannon-prestate +cannon-prestate-mt: op-program cannon ## Generates prestate using cannon and op-program in the multithreaded cannon format + ./cannon/bin/cannon load-elf --type mt --path op-program/bin/op-program-client.elf --out op-program/bin/prestate-mt.json --meta op-program/bin/meta-mt.json + ./cannon/bin/cannon run --type mt --proof-at '=0' --stop-at '=1' --input op-program/bin/prestate-mt.json --meta op-program/bin/meta-mt.json --proof-fmt 'op-program/bin/%d-mt.json' --output "" + mv op-program/bin/0-mt.json op-program/bin/prestate-proof-mt.json +.PHONY: cannon-prestate + mod-tidy: ## Cleans up unused dependencies in Go modules # Below GOPRIVATE line allows mod-tidy to be run immediately after # releasing new versions. This bypasses the Go modules proxy, which diff --git a/cannon/cmd/load_elf.go b/cannon/cmd/load_elf.go index f111d1a883..39e389ff23 100644 --- a/cannon/cmd/load_elf.go +++ b/cannon/cmd/load_elf.go @@ -4,6 +4,8 @@ import ( "debug/elf" "fmt" + "github.com/ethereum-optimism/optimism/cannon/mipsevm" + "github.com/ethereum-optimism/optimism/cannon/mipsevm/multithreaded" "github.com/urfave/cli/v2" "github.com/ethereum-optimism/optimism/cannon/mipsevm/program" @@ -39,6 +41,28 @@ var ( ) func LoadELF(ctx *cli.Context) error { + var createInitialState func(f *elf.File) (mipsevm.FPVMState, error) + var writeState func(path string, state mipsevm.FPVMState) error + + if vmType, err := vmTypeFromString(ctx); err != nil { + return err + } else if vmType == cannonVMType { + createInitialState = func(f *elf.File) (mipsevm.FPVMState, error) { + return program.LoadELF(f, singlethreaded.CreateInitialState) + } + writeState = func(path string, state mipsevm.FPVMState) error { + return jsonutil.WriteJSON[*singlethreaded.State](path, state.(*singlethreaded.State), OutFilePerm) + } + } else if vmType == mtVMType { + createInitialState = func(f *elf.File) (mipsevm.FPVMState, error) { + return program.LoadELF(f, multithreaded.CreateInitialState) + } + writeState = func(path string, state mipsevm.FPVMState) error { + return jsonutil.WriteJSON[*multithreaded.State](path, state.(*multithreaded.State), OutFilePerm) + } + } else { + return fmt.Errorf("invalid VM type: %q", vmType) + } elfPath := ctx.Path(LoadELFPathFlag.Name) elfProgram, err := elf.Open(elfPath) if err != nil { @@ -47,7 +71,7 @@ func LoadELF(ctx *cli.Context) error { if elfProgram.Machine != elf.EM_MIPS { return fmt.Errorf("ELF is not big-endian MIPS R3000, but got %q", elfProgram.Machine.String()) } - state, err := program.LoadELF(elfProgram, singlethreaded.CreateInitialState) + state, err := createInitialState(elfProgram) if err != nil { return fmt.Errorf("failed to load ELF data into VM state: %w", err) } @@ -71,7 +95,7 @@ func LoadELF(ctx *cli.Context) error { if err := jsonutil.WriteJSON[*program.Metadata](ctx.Path(LoadELFMetaFlag.Name), meta, OutFilePerm); err != nil { return fmt.Errorf("failed to output metadata: %w", err) } - return jsonutil.WriteJSON[*singlethreaded.State](ctx.Path(LoadELFOutFlag.Name), state, OutFilePerm) + return writeState(ctx.Path(LoadELFOutFlag.Name), state) } var LoadELFCommand = &cli.Command{ @@ -80,6 +104,7 @@ var LoadELFCommand = &cli.Command{ Description: "Load ELF file into Cannon JSON state, optionally patch out functions", Action: LoadELF, Flags: []cli.Flag{ + VMTypeFlag, LoadELFPathFlag, LoadELFPatchFlag, LoadELFOutFlag, diff --git a/cannon/cmd/run.go b/cannon/cmd/run.go index 22addbf3eb..23b6e1b757 100644 --- a/cannon/cmd/run.go +++ b/cannon/cmd/run.go @@ -10,6 +10,7 @@ import ( "strings" "time" + "github.com/ethereum-optimism/optimism/cannon/mipsevm/multithreaded" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/log" @@ -24,13 +25,6 @@ import ( ) var ( - RunType = &cli.StringFlag{ - Name: "type", - Usage: "VM type to run. Options are 'cannon' (default)", - Value: "cannon", - // TODO(client-pod#903): This should be required once we have additional vm types - Required: false, - } RunInputFlag = &cli.PathFlag{ Name: "input", Usage: "path of input JSON state. Stdin if left empty.", @@ -258,20 +252,14 @@ func Guard(proc *os.ProcessState, fn StepFn) StepFn { var _ mipsevm.PreimageOracle = (*ProcessPreimageOracle)(nil) -type VMType string - -var cannonVMType VMType = "cannon" - func Run(ctx *cli.Context) error { if ctx.Bool(RunPProfCPU.Name) { defer profile.Start(profile.NoShutdownHook, profile.ProfilePath("."), profile.CPUProfile).Stop() } - var vmType VMType - if vmTypeStr := ctx.String(RunType.Name); vmTypeStr == string(cannonVMType) { - vmType = cannonVMType - } else { - return fmt.Errorf("unknown VM type %q", vmType) + vmType, err := vmTypeFromString(ctx) + if err != nil { + return err } guestLogger := Logger(os.Stderr, log.LevelInfo) @@ -366,6 +354,7 @@ func Run(ctx *cli.Context) error { var vm mipsevm.FPVM var debugProgram bool if vmType == cannonVMType { + l.Info("Using cannon VM") cannon, err := singlethreaded.NewInstrumentedStateFromFile(ctx.Path(RunInputFlag.Name), po, outLog, errLog, meta) if err != nil { return err @@ -380,6 +369,22 @@ func Run(ctx *cli.Context) error { } } vm = cannon + } else if vmType == mtVMType { + l.Info("Using cannon multithreaded VM") + cannon, err := multithreaded.NewInstrumentedStateFromFile(ctx.Path(RunInputFlag.Name), po, outLog, errLog, l) + if err != nil { + return err + } + debugProgram = ctx.Bool(RunDebugFlag.Name) + if debugProgram { + if metaPath := ctx.Path(RunMetaFlag.Name); metaPath == "" { + return fmt.Errorf("cannot enable debug mode without a metadata file") + } + if err := cannon.InitDebug(meta); err != nil { + return fmt.Errorf("failed to initialize debug mode: %w", err) + } + } + vm = cannon } else { return fmt.Errorf("unknown VM type %q", vmType) } @@ -503,7 +508,7 @@ var RunCommand = &cli.Command{ Description: "Run VM step(s) and generate proof data to replicate onchain. See flags to match when to output a proof, a snapshot, or to stop early.", Action: Run, Flags: []cli.Flag{ - RunType, + VMTypeFlag, RunInputFlag, RunOutputFlag, RunProofAtFlag, diff --git a/cannon/cmd/vmtype.go b/cannon/cmd/vmtype.go new file mode 100644 index 0000000000..0efc22370c --- /dev/null +++ b/cannon/cmd/vmtype.go @@ -0,0 +1,29 @@ +package cmd + +import ( + "fmt" + + "github.com/urfave/cli/v2" +) + +type VMType string + +var cannonVMType VMType = "cannon" +var mtVMType VMType = "cannon-mt" + +var VMTypeFlag = &cli.StringFlag{ + Name: "type", + Usage: "VM type to create state for. Options are 'cannon' (default), 'cannon-mt'", + Value: "cannon", + Required: false, +} + +func vmTypeFromString(ctx *cli.Context) (VMType, error) { + if vmTypeStr := ctx.String(VMTypeFlag.Name); vmTypeStr == string(cannonVMType) { + return cannonVMType, nil + } else if vmTypeStr == string(mtVMType) { + return mtVMType, nil + } else { + return "", fmt.Errorf("unknown VM type %q", vmTypeStr) + } +} diff --git a/cannon/cmd/witness.go b/cannon/cmd/witness.go index 656684b691..eda5fbca5f 100644 --- a/cannon/cmd/witness.go +++ b/cannon/cmd/witness.go @@ -4,6 +4,8 @@ import ( "fmt" "os" + "github.com/ethereum-optimism/optimism/cannon/mipsevm" + "github.com/ethereum-optimism/optimism/cannon/mipsevm/multithreaded" "github.com/urfave/cli/v2" "github.com/ethereum-optimism/optimism/cannon/mipsevm/singlethreaded" @@ -27,10 +29,23 @@ var ( func Witness(ctx *cli.Context) error { input := ctx.Path(WitnessInputFlag.Name) output := ctx.Path(WitnessOutputFlag.Name) - state, err := jsonutil.LoadJSON[singlethreaded.State](input) - if err != nil { - return fmt.Errorf("invalid input state (%v): %w", input, err) + var state mipsevm.FPVMState + if vmType, err := vmTypeFromString(ctx); err != nil { + return err + } else if vmType == cannonVMType { + state, err = jsonutil.LoadJSON[singlethreaded.State](input) + if err != nil { + return fmt.Errorf("invalid input state (%v): %w", input, err) + } + } else if vmType == mtVMType { + state, err = jsonutil.LoadJSON[multithreaded.State](input) + if err != nil { + return fmt.Errorf("invalid input state (%v): %w", input, err) + } + } else { + return fmt.Errorf("invalid VM type: %q", vmType) } + witness, h := state.EncodeWitness() if output != "" { if err := os.WriteFile(output, witness, 0755); err != nil { @@ -47,6 +62,7 @@ var WitnessCommand = &cli.Command{ Description: "Convert a Cannon JSON state into a binary witness. The hash of the witness is written to stdout", Action: Witness, Flags: []cli.Flag{ + VMTypeFlag, WitnessInputFlag, WitnessOutputFlag, }, From d098cf8c9a7cb6c7d12625f645bb939859123362 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Aug 2024 22:40:27 +0000 Subject: [PATCH 25/29] dependabot(gomod): bump golang.org/x/crypto from 0.25.0 to 0.26.0 (#11373) * dependabot(gomod): bump golang.org/x/crypto from 0.25.0 to 0.26.0 Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.25.0 to 0.26.0. - [Commits](https://github.com/golang/crypto/compare/v0.25.0...v0.26.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * deps: update --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Mark Tyneway --- cannon/testdata/example/alloc/go.mod | 4 ++-- cannon/testdata/example/alloc/go.sum | 16 ++++++++-------- cannon/testdata/example/claim/go.mod | 4 ++-- cannon/testdata/example/claim/go.sum | 16 ++++++++-------- go.mod | 8 ++++---- go.sum | 16 ++++++++-------- 6 files changed, 32 insertions(+), 32 deletions(-) diff --git a/cannon/testdata/example/alloc/go.mod b/cannon/testdata/example/alloc/go.mod index 5ead2ebe8a..a69b250b40 100644 --- a/cannon/testdata/example/alloc/go.mod +++ b/cannon/testdata/example/alloc/go.mod @@ -7,8 +7,8 @@ toolchain go1.21.1 require github.com/ethereum-optimism/optimism v0.0.0 require ( - golang.org/x/crypto v0.25.0 // indirect - golang.org/x/sys v0.22.0 // indirect + golang.org/x/crypto v0.26.0 // indirect + golang.org/x/sys v0.23.0 // indirect ) replace github.com/ethereum-optimism/optimism v0.0.0 => ../../../.. diff --git a/cannon/testdata/example/alloc/go.sum b/cannon/testdata/example/alloc/go.sum index 5b5d4a3a64..18c7fa264e 100644 --- a/cannon/testdata/example/alloc/go.sum +++ b/cannon/testdata/example/alloc/go.sum @@ -1,12 +1,12 @@ -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= -golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= -golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= +golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= +golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= +golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/cannon/testdata/example/claim/go.mod b/cannon/testdata/example/claim/go.mod index dfbd45f6f5..ae511e9626 100644 --- a/cannon/testdata/example/claim/go.mod +++ b/cannon/testdata/example/claim/go.mod @@ -7,8 +7,8 @@ toolchain go1.21.1 require github.com/ethereum-optimism/optimism v0.0.0 require ( - golang.org/x/crypto v0.25.0 // indirect - golang.org/x/sys v0.22.0 // indirect + golang.org/x/crypto v0.26.0 // indirect + golang.org/x/sys v0.23.0 // indirect ) replace github.com/ethereum-optimism/optimism v0.0.0 => ../../../.. diff --git a/cannon/testdata/example/claim/go.sum b/cannon/testdata/example/claim/go.sum index 5b5d4a3a64..18c7fa264e 100644 --- a/cannon/testdata/example/claim/go.sum +++ b/cannon/testdata/example/claim/go.sum @@ -1,12 +1,12 @@ -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= -golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= -golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= +golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= +golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= +golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/go.mod b/go.mod index 7914ba567f..e4c54d456e 100644 --- a/go.mod +++ b/go.mod @@ -42,10 +42,10 @@ require ( github.com/protolambda/ctxlock v0.1.0 github.com/stretchr/testify v1.9.0 github.com/urfave/cli/v2 v2.27.3 - golang.org/x/crypto v0.25.0 + golang.org/x/crypto v0.26.0 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 golang.org/x/sync v0.8.0 - golang.org/x/term v0.22.0 + golang.org/x/term v0.23.0 golang.org/x/time v0.6.0 ) @@ -222,8 +222,8 @@ require ( go.uber.org/zap v1.27.0 // indirect golang.org/x/mod v0.19.0 // indirect golang.org/x/net v0.27.0 // indirect - golang.org/x/sys v0.22.0 // indirect - golang.org/x/text v0.16.0 // indirect + golang.org/x/sys v0.23.0 // indirect + golang.org/x/text v0.17.0 // indirect golang.org/x/tools v0.23.0 // indirect google.golang.org/protobuf v1.34.1 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect diff --git a/go.sum b/go.sum index c46caed5ae..9db642d8ab 100644 --- a/go.sum +++ b/go.sum @@ -822,8 +822,8 @@ golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98y golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= -golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= -golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= +golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= +golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= @@ -954,8 +954,8 @@ golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= -golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= +golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -967,8 +967,8 @@ golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= -golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= -golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= +golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU= +golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -982,8 +982,8 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= +golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= From 773e476b18ed6004aa7dade19a55519deb188942 Mon Sep 17 00:00:00 2001 From: Axel Kingsley Date: Fri, 9 Aug 2024 17:46:55 -0500 Subject: [PATCH 26/29] op-supervisor: Include executing message info when storing logs. (#11369) * Rebase: op-supervisor: Include executing message info when storing logs. Takes from aj/parse-exec-msg and makes the following updates: - uses upstream ABI definitions for identifier hash - removes the core recording functionality for the moment - fixes up inconsistent typing and merge conflicts due to rearranged packages * Incorporate new ABI format * remove trailing newline in contract --------- Co-authored-by: Adrian Sutton --- .../backend/source/contracts/l2inbox.go | 134 ++++++++++++++++++ .../backend/source/contracts/l2inbox_test.go | 75 ++++++++++ .../backend/source/log_processor.go | 70 +++++++-- .../backend/source/log_processor_test.go | 71 ++++++++-- op-supervisor/supervisor/types/types.go | 17 ++- op-supervisor/supervisor/types/types_test.go | 4 +- 6 files changed, 341 insertions(+), 30 deletions(-) create mode 100644 op-supervisor/supervisor/backend/source/contracts/l2inbox.go create mode 100644 op-supervisor/supervisor/backend/source/contracts/l2inbox_test.go diff --git a/op-supervisor/supervisor/backend/source/contracts/l2inbox.go b/op-supervisor/supervisor/backend/source/contracts/l2inbox.go new file mode 100644 index 0000000000..b490b612e6 --- /dev/null +++ b/op-supervisor/supervisor/backend/source/contracts/l2inbox.go @@ -0,0 +1,134 @@ +package contracts + +import ( + "bytes" + "errors" + "fmt" + "io" + "math/big" + + "github.com/ethereum-optimism/optimism/op-service/predeploys" + "github.com/ethereum-optimism/optimism/op-service/solabi" + "github.com/ethereum-optimism/optimism/op-service/sources/batching" + backendTypes "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/types" + "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/types" + "github.com/ethereum-optimism/optimism/packages/contracts-bedrock/snapshots" + "github.com/ethereum/go-ethereum/common" + ethTypes "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" +) + +const ( + eventExecutingMessage = "ExecutingMessage" +) + +var ( + ErrEventNotFound = errors.New("event not found") +) + +type contractIdentifier struct { + // Origin represents the address that initiated the message + // it is used in combination with the MsgHash to uniquely identify a message + // and is hashed into the log hash, not stored directly. + Origin common.Address + LogIndex *big.Int + BlockNumber *big.Int + ChainId *big.Int + Timestamp *big.Int +} + +type CrossL2Inbox struct { + contract *batching.BoundContract +} + +func NewCrossL2Inbox() *CrossL2Inbox { + abi := snapshots.LoadCrossL2InboxABI() + return &CrossL2Inbox{ + contract: batching.NewBoundContract(abi, predeploys.CrossL2InboxAddr), + } +} + +func (i *CrossL2Inbox) DecodeExecutingMessageLog(l *ethTypes.Log) (backendTypes.ExecutingMessage, error) { + if l.Address != i.contract.Addr() { + return backendTypes.ExecutingMessage{}, fmt.Errorf("%w: log not from CrossL2Inbox", ErrEventNotFound) + } + // use DecodeEvent to check the name of the event + // but the actual decoding is done manually to extract the contract identifier + name, _, err := i.contract.DecodeEvent(l) + if errors.Is(err, batching.ErrUnknownEvent) { + return backendTypes.ExecutingMessage{}, fmt.Errorf("%w: %v", ErrEventNotFound, err.Error()) + } else if err != nil { + return backendTypes.ExecutingMessage{}, fmt.Errorf("failed to decode event: %w", err) + } + if name != eventExecutingMessage { + return backendTypes.ExecutingMessage{}, fmt.Errorf("%w: event %v not an ExecutingMessage event", ErrEventNotFound, name) + } + // the second topic is the hash of the payload (the first is the event ID) + msgHash := l.Topics[1] + // the first 32 bytes of the data are the msgHash, so we skip them + identifierBytes := bytes.NewReader(l.Data[32:]) + identifier, err := identifierFromBytes(identifierBytes) + if err != nil { + return backendTypes.ExecutingMessage{}, fmt.Errorf("failed to read contract identifier: %w", err) + } + chainID, err := types.ChainIDFromBig(identifier.ChainId).ToUInt32() + if err != nil { + return backendTypes.ExecutingMessage{}, fmt.Errorf("failed to convert chain ID %v to uint32: %w", identifier.ChainId, err) + } + hash := payloadHashToLogHash(msgHash, identifier.Origin) + return backendTypes.ExecutingMessage{ + Chain: chainID, + Hash: hash, + BlockNum: identifier.BlockNumber.Uint64(), + LogIdx: uint32(identifier.LogIndex.Uint64()), + Timestamp: identifier.Timestamp.Uint64(), + }, nil +} + +// identifierFromBytes reads a contract identifier from a byte stream. +// it follows the spec and matches the CrossL2Inbox.json definition, +// rather than relying on reflection, as that can be error-prone regarding struct ordering +func identifierFromBytes(identifierBytes io.Reader) (contractIdentifier, error) { + origin, err := solabi.ReadAddress(identifierBytes) + if err != nil { + return contractIdentifier{}, fmt.Errorf("failed to read origin address: %w", err) + } + originAddr := common.BytesToAddress(origin[:]) + blockNumber, err := solabi.ReadUint256(identifierBytes) + if err != nil { + return contractIdentifier{}, fmt.Errorf("failed to read block number: %w", err) + } + logIndex, err := solabi.ReadUint256(identifierBytes) + if err != nil { + return contractIdentifier{}, fmt.Errorf("failed to read log index: %w", err) + } + timestamp, err := solabi.ReadUint256(identifierBytes) + if err != nil { + return contractIdentifier{}, fmt.Errorf("failed to read timestamp: %w", err) + } + chainID, err := solabi.ReadUint256(identifierBytes) + if err != nil { + return contractIdentifier{}, fmt.Errorf("failed to read chain ID: %w", err) + } + return contractIdentifier{ + Origin: originAddr, + BlockNumber: blockNumber, + LogIndex: logIndex, + Timestamp: timestamp, + ChainId: chainID, + }, nil +} + +// payloadHashToLogHash converts the payload hash to the log hash +// it is the concatenation of the log's address and the hash of the log's payload, +// which is then hashed again. This is the hash that is stored in the log storage. +// The logHash can then be used to traverse from the executing message +// to the log the referenced initiating message. +// TODO: this function is duplicated between contracts and backend/source/log_processor.go +// to avoid a circular dependency. It should be reorganized to avoid this duplication. +func payloadHashToLogHash(payloadHash common.Hash, addr common.Address) backendTypes.TruncatedHash { + msg := make([]byte, 0, 2*common.HashLength) + msg = append(msg, addr.Bytes()...) + msg = append(msg, payloadHash.Bytes()...) + return backendTypes.TruncateHash(crypto.Keccak256Hash(msg)) +} diff --git a/op-supervisor/supervisor/backend/source/contracts/l2inbox_test.go b/op-supervisor/supervisor/backend/source/contracts/l2inbox_test.go new file mode 100644 index 0000000000..b343519a48 --- /dev/null +++ b/op-supervisor/supervisor/backend/source/contracts/l2inbox_test.go @@ -0,0 +1,75 @@ +package contracts + +import ( + "bytes" + "math/big" + "testing" + + "github.com/ethereum-optimism/optimism/op-service/predeploys" + "github.com/ethereum-optimism/optimism/op-service/sources/batching" + backendTypes "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/types" + "github.com/ethereum-optimism/optimism/packages/contracts-bedrock/snapshots" + "github.com/ethereum/go-ethereum/common" + ethTypes "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/stretchr/testify/require" +) + +func TestDecodeExecutingMessageEvent(t *testing.T) { + inbox := NewCrossL2Inbox() + payload := bytes.Repeat([]byte{0xaa, 0xbb}, 50) + payloadHash := crypto.Keccak256Hash(payload) + expected := backendTypes.ExecutingMessage{ + Chain: 42424, + BlockNum: 12345, + LogIdx: 98, + Timestamp: 9578295, + } + contractIdent := contractIdentifier{ + Origin: common.Address{0xbb, 0xcc}, + ChainId: new(big.Int).SetUint64(uint64(expected.Chain)), + BlockNumber: new(big.Int).SetUint64(expected.BlockNum), + Timestamp: new(big.Int).SetUint64(expected.Timestamp), + LogIndex: new(big.Int).SetUint64(uint64(expected.LogIdx)), + } + expected.Hash = payloadHashToLogHash(payloadHash, contractIdent.Origin) + abi := snapshots.LoadCrossL2InboxABI() + validData, err := abi.Events[eventExecutingMessage].Inputs.Pack(payloadHash, contractIdent) + require.NoError(t, err) + createValidLog := func() *ethTypes.Log { + //protoHack := bytes.Repeat([]byte{0x00}, 32*5) + return ðTypes.Log{ + Address: predeploys.CrossL2InboxAddr, + Topics: []common.Hash{abi.Events[eventExecutingMessage].ID, payloadHash}, + Data: validData, + } + } + + t.Run("ParseValid", func(t *testing.T) { + l := createValidLog() + result, err := inbox.DecodeExecutingMessageLog(l) + require.NoError(t, err) + require.Equal(t, expected, result) + }) + + t.Run("IgnoreIncorrectContract", func(t *testing.T) { + l := createValidLog() + l.Address = common.Address{0xff} + _, err := inbox.DecodeExecutingMessageLog(l) + require.ErrorIs(t, err, ErrEventNotFound) + }) + + t.Run("IgnoreWrongEvent", func(t *testing.T) { + l := createValidLog() + l.Topics[0] = common.Hash{0xbb} + _, err := inbox.DecodeExecutingMessageLog(l) + require.ErrorIs(t, err, ErrEventNotFound) + }) + + t.Run("ErrorOnInvalidEvent", func(t *testing.T) { + l := createValidLog() + l.Data = []byte{0xbb, 0xcc} + _, err := inbox.DecodeExecutingMessageLog(l) + require.ErrorIs(t, err, batching.ErrInvalidEvent) + }) +} diff --git a/op-supervisor/supervisor/backend/source/log_processor.go b/op-supervisor/supervisor/backend/source/log_processor.go index 3fa513588d..3fd96476d4 100644 --- a/op-supervisor/supervisor/backend/source/log_processor.go +++ b/op-supervisor/supervisor/backend/source/log_processor.go @@ -2,10 +2,12 @@ package source import ( "context" + "errors" "fmt" "github.com/ethereum-optimism/optimism/op-service/eth" - "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/types" + "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/source/contracts" + backendTypes "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/types" supTypes "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/types" "github.com/ethereum/go-ethereum/common" ethTypes "github.com/ethereum/go-ethereum/core/types" @@ -13,23 +15,46 @@ import ( ) type LogStorage interface { - AddLog(chain supTypes.ChainID, logHash types.TruncatedHash, block eth.BlockID, timestamp uint64, logIdx uint32, execMsg *types.ExecutingMessage) error + AddLog(chain supTypes.ChainID, logHash backendTypes.TruncatedHash, block eth.BlockID, timestamp uint64, logIdx uint32, execMsg *backendTypes.ExecutingMessage) error +} + +type EventDecoder interface { + DecodeExecutingMessageLog(log *ethTypes.Log) (backendTypes.ExecutingMessage, error) } type logProcessor struct { - chain supTypes.ChainID - logStore LogStorage + chain supTypes.ChainID + logStore LogStorage + eventDecoder EventDecoder } func newLogProcessor(chain supTypes.ChainID, logStore LogStorage) *logProcessor { - return &logProcessor{chain: chain, logStore: logStore} + return &logProcessor{ + chain: chain, + logStore: logStore, + eventDecoder: contracts.NewCrossL2Inbox(), + } } +// ProcessLogs processes logs from a block and stores them in the log storage +// for any logs that are related to executing messages, they are decoded and stored func (p *logProcessor) ProcessLogs(_ context.Context, block eth.L1BlockRef, rcpts ethTypes.Receipts) error { for _, rcpt := range rcpts { for _, l := range rcpt.Logs { - logHash := logToHash(l) - err := p.logStore.AddLog(p.chain, logHash, block.ID(), block.Time, uint32(l.Index), nil) + // log hash represents the hash of *this* log as a potentially initiating message + logHash := logToLogHash(l) + var execMsg *backendTypes.ExecutingMessage + msg, err := p.eventDecoder.DecodeExecutingMessageLog(l) + if err != nil && !errors.Is(err, contracts.ErrEventNotFound) { + return fmt.Errorf("failed to decode executing message log: %w", err) + } else if err == nil { + // if the log is an executing message, store the message + execMsg = &msg + } + // executing messages have multiple entries in the database + // they should start with the initiating message and then include the execution + fmt.Println("p.chain", p.chain) + err = p.logStore.AddLog(p.chain, logHash, block.ID(), block.Time, uint32(l.Index), execMsg) if err != nil { return fmt.Errorf("failed to add log %d from block %v: %w", l.Index, block.ID(), err) } @@ -38,15 +63,20 @@ func (p *logProcessor) ProcessLogs(_ context.Context, block eth.L1BlockRef, rcpt return nil } -func logToHash(l *ethTypes.Log) types.TruncatedHash { - payloadHash := crypto.Keccak256(logToPayload(l)) - msg := make([]byte, 0, 2*common.HashLength) - msg = append(msg, l.Address.Bytes()...) - msg = append(msg, payloadHash...) - return types.TruncateHash(crypto.Keccak256Hash(msg)) +// logToLogHash transforms a log into a hash that represents the log. +// it is the concatenation of the log's address and the hash of the log's payload, +// which is then hashed again. This is the hash that is stored in the log storage. +// The address is hashed into the payload hash to save space in the log storage, +// and because they represent paired data. +func logToLogHash(l *ethTypes.Log) backendTypes.TruncatedHash { + payloadHash := crypto.Keccak256(logToMessagePayload(l)) + return payloadHashToLogHash(common.Hash(payloadHash), l.Address) } -func logToPayload(l *ethTypes.Log) []byte { +// logToMessagePayload is the data that is hashed to get the logHash +// it is the concatenation of the log's topics and data +// the implementation is based on the interop messaging spec +func logToMessagePayload(l *ethTypes.Log) []byte { msg := make([]byte, 0) for _, topic := range l.Topics { msg = append(msg, topic.Bytes()...) @@ -54,3 +84,15 @@ func logToPayload(l *ethTypes.Log) []byte { msg = append(msg, l.Data...) return msg } + +// payloadHashToLogHash converts the payload hash to the log hash +// it is the concatenation of the log's address and the hash of the log's payload, +// which is then hashed. This is the hash that is stored in the log storage. +// The logHash can then be used to traverse from the executing message +// to the log the referenced initiating message. +func payloadHashToLogHash(payloadHash common.Hash, addr common.Address) backendTypes.TruncatedHash { + msg := make([]byte, 0, 2*common.HashLength) + msg = append(msg, addr.Bytes()...) + msg = append(msg, payloadHash.Bytes()...) + return backendTypes.TruncateHash(crypto.Keccak256Hash(msg)) +} diff --git a/op-supervisor/supervisor/backend/source/log_processor_test.go b/op-supervisor/supervisor/backend/source/log_processor_test.go index f83fea2507..5c65973ab4 100644 --- a/op-supervisor/supervisor/backend/source/log_processor_test.go +++ b/op-supervisor/supervisor/backend/source/log_processor_test.go @@ -6,7 +6,8 @@ import ( "testing" "github.com/ethereum-optimism/optimism/op-service/eth" - "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/types" + "github.com/ethereum-optimism/optimism/op-service/predeploys" + backendTypes "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/types" supTypes "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/types" "github.com/ethereum/go-ethereum/common" ethTypes "github.com/ethereum/go-ethereum/core/types" @@ -63,26 +64,66 @@ func TestLogProcessor(t *testing.T) { block: block1.ID(), timestamp: block1.Time, logIdx: 0, - logHash: logToHash(rcpts[0].Logs[0]), + logHash: logToLogHash(rcpts[0].Logs[0]), execMsg: nil, }, { block: block1.ID(), timestamp: block1.Time, logIdx: 0, - logHash: logToHash(rcpts[0].Logs[1]), + logHash: logToLogHash(rcpts[0].Logs[1]), execMsg: nil, }, { block: block1.ID(), timestamp: block1.Time, logIdx: 0, - logHash: logToHash(rcpts[1].Logs[0]), + logHash: logToLogHash(rcpts[1].Logs[0]), execMsg: nil, }, } require.Equal(t, expected, store.logs) }) + + t.Run("IncludeExecutingMessage", func(t *testing.T) { + rcpts := ethTypes.Receipts{ + { + Logs: []*ethTypes.Log{ + { + Address: predeploys.CrossL2InboxAddr, + Topics: []common.Hash{}, + Data: []byte{0xff}, + }, + }, + }, + } + execMsg := backendTypes.ExecutingMessage{ + Chain: 4, + BlockNum: 6, + LogIdx: 8, + Timestamp: 10, + Hash: backendTypes.TruncatedHash{0xaa}, + } + store := &stubLogStorage{} + processor := newLogProcessor(supTypes.ChainID{4}, store) + processor.eventDecoder = EventDecoderFn(func(l *ethTypes.Log) (backendTypes.ExecutingMessage, error) { + require.Equal(t, rcpts[0].Logs[0], l) + return execMsg, nil + }) + + err := processor.ProcessLogs(ctx, block1, rcpts) + require.NoError(t, err) + expected := []storedLog{ + { + block: block1.ID(), + timestamp: block1.Time, + logIdx: 0, + logHash: logToLogHash(rcpts[0].Logs[0]), + execMsg: &execMsg, + }, + } + require.Equal(t, expected, store.logs) + }) } func TestToLogHash(t *testing.T) { @@ -119,24 +160,24 @@ func TestToLogHash(t *testing.T) { func(l *ethTypes.Log) { l.Index = 98 }, func(l *ethTypes.Log) { l.Removed = true }, } - refHash := logToHash(mkLog()) + refHash := logToLogHash(mkLog()) // The log hash is stored in the database so test that it matches the actual value. - // If this changes compatibility with existing databases may be affected - expectedRefHash := types.TruncateHash(common.HexToHash("0x4e1dc08fddeb273275f787762cdfe945cf47bb4e80a1fabbc7a825801e81b73f")) + // If this changes, compatibility with existing databases may be affected + expectedRefHash := backendTypes.TruncateHash(common.HexToHash("0x4e1dc08fddeb273275f787762cdfe945cf47bb4e80a1fabbc7a825801e81b73f")) require.Equal(t, expectedRefHash, refHash, "reference hash changed, check that database compatibility is not broken") // Check that the hash is changed when any data it should include changes for i, mod := range relevantMods { l := mkLog() mod(l) - hash := logToHash(l) + hash := logToLogHash(l) require.NotEqualf(t, refHash, hash, "expected relevant modification %v to affect the hash but it did not", i) } // Check that the hash is not changed when any data it should not include changes for i, mod := range irrelevantMods { l := mkLog() mod(l) - hash := logToHash(l) + hash := logToLogHash(l) require.Equal(t, refHash, hash, "expected irrelevant modification %v to not affect the hash but it did", i) } } @@ -145,7 +186,7 @@ type stubLogStorage struct { logs []storedLog } -func (s *stubLogStorage) AddLog(chainID supTypes.ChainID, logHash types.TruncatedHash, block eth.BlockID, timestamp uint64, logIdx uint32, execMsg *types.ExecutingMessage) error { +func (s *stubLogStorage) AddLog(chainID supTypes.ChainID, logHash backendTypes.TruncatedHash, block eth.BlockID, timestamp uint64, logIdx uint32, execMsg *backendTypes.ExecutingMessage) error { if logProcessorChainID != chainID { return fmt.Errorf("chain id mismatch, expected %v but got %v", logProcessorChainID, chainID) } @@ -163,6 +204,12 @@ type storedLog struct { block eth.BlockID timestamp uint64 logIdx uint32 - logHash types.TruncatedHash - execMsg *types.ExecutingMessage + logHash backendTypes.TruncatedHash + execMsg *backendTypes.ExecutingMessage +} + +type EventDecoderFn func(*ethTypes.Log) (backendTypes.ExecutingMessage, error) + +func (f EventDecoderFn) DecodeExecutingMessageLog(log *ethTypes.Log) (backendTypes.ExecutingMessage, error) { + return f(log) } diff --git a/op-supervisor/supervisor/types/types.go b/op-supervisor/supervisor/types/types.go index 7e39628bdc..41d66611c2 100644 --- a/op-supervisor/supervisor/types/types.go +++ b/op-supervisor/supervisor/types/types.go @@ -4,6 +4,7 @@ import ( "encoding/json" "errors" "fmt" + "math" "math/big" "github.com/holiman/uint256" @@ -17,7 +18,7 @@ type Identifier struct { BlockNumber uint64 LogIndex uint64 Timestamp uint64 - ChainID uint256.Int // flat, not a pointer, to make Identifier safe as map key + ChainID ChainID // flat, not a pointer, to make Identifier safe as map key } type identifierMarshaling struct { @@ -47,7 +48,7 @@ func (id *Identifier) UnmarshalJSON(input []byte) error { id.BlockNumber = uint64(dec.BlockNumber) id.LogIndex = uint64(dec.LogIndex) id.Timestamp = uint64(dec.Timestamp) - id.ChainID = (uint256.Int)(dec.ChainID) + id.ChainID = (ChainID)(dec.ChainID) return nil } @@ -102,3 +103,15 @@ func ChainIDFromUInt64(i uint64) ChainID { func (id ChainID) String() string { return ((*uint256.Int)(&id)).Dec() } + +func (id ChainID) ToUInt32() (uint32, error) { + v := (*uint256.Int)(&id) + if !v.IsUint64() { + return 0, fmt.Errorf("ChainID too large for uint32: %v", id) + } + v64 := v.Uint64() + if v64 > math.MaxUint32 { + return 0, fmt.Errorf("ChainID too large for uint32: %v", id) + } + return uint32(v64), nil +} diff --git a/op-supervisor/supervisor/types/types_test.go b/op-supervisor/supervisor/types/types_test.go index f089a25665..50c856bdc7 100644 --- a/op-supervisor/supervisor/types/types_test.go +++ b/op-supervisor/supervisor/types/types_test.go @@ -3,6 +3,7 @@ package types import ( "encoding/json" "math" + "math/big" "testing" "github.com/stretchr/testify/require" @@ -22,9 +23,8 @@ func FuzzRoundtripIdentifierJSONMarshal(f *testing.F) { BlockNumber: blockNumber, LogIndex: logIndex, Timestamp: timestamp, - ChainID: uint256.Int{}, + ChainID: ChainIDFromBig(new(big.Int).SetBytes(chainID)), } - id.ChainID.SetBytes(chainID) raw, err := json.Marshal(&id) require.NoError(t, err) From 5a4fbce2bc780a908afeab255513aa38ca3c49b8 Mon Sep 17 00:00:00 2001 From: smartcontracts Date: Sat, 10 Aug 2024 09:32:39 -0400 Subject: [PATCH 27/29] fix: minor error in contracts readme (#11432) --- packages/contracts-bedrock/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/contracts-bedrock/README.md b/packages/contracts-bedrock/README.md index 2e01cc3606..132042e8dc 100644 --- a/packages/contracts-bedrock/README.md +++ b/packages/contracts-bedrock/README.md @@ -251,7 +251,7 @@ graph LR OP Stack smart contracts are published to NPM and can be installed via: ```sh -npm install @eth-optimism/contracts-bedrock. +npm install @eth-optimism/contracts-bedrock ``` Refer to the [Optimism Developer Docs](https://docs.optimism.io/builders/dapp-developers/contracts/system-contracts#using-system-contracts-in-solidity) for additional information about how to use this package. From 5c8ebef990ca327470858ae245c6d0869ef2458c Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Tue, 13 Aug 2024 00:47:14 +1000 Subject: [PATCH 28/29] Don't recheck terminal type for color (#11412) Not necessary as it's checked further up the call tree. Without this --log.color doesn't work when intended. --- op-service/log/cli.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op-service/log/cli.go b/op-service/log/cli.go index 2bd3c69300..b51a48930b 100644 --- a/op-service/log/cli.go +++ b/op-service/log/cli.go @@ -140,7 +140,7 @@ func FormatHandler(ft FormatType, color bool) func(io.Writer) slog.Handler { case FormatJSON: return log.JSONHandler case FormatText: - if term.IsTerminal(int(os.Stdout.Fd())) { + if color { return termColorHandler } else { return logfmtHandler From 995ddcfb4a6e6ffd806169686690fa0e8aabfbee Mon Sep 17 00:00:00 2001 From: smartcontracts Date: Mon, 12 Aug 2024 15:32:52 -0400 Subject: [PATCH 29/29] maint: further clean up contract scripts organization (#11434) Scripts within contracts-bedrock are all over the place. Relatively minor PR that moves things around into a cleaner folder structure. Scripts themselves are unchanged. --- packages/contracts-bedrock/justfile | 4 ++-- packages/contracts-bedrock/scripts/Artifacts.s.sol | 8 ++++---- packages/contracts-bedrock/scripts/L2Genesis.s.sol | 2 +- .../scripts/{ => autogen}/SemverLock.s.sol | 0 .../scripts/{ => deploy}/ChainAssertions.sol | 2 +- packages/contracts-bedrock/scripts/deploy/Deploy.s.sol | 10 +++++----- .../scripts/deploy/DeployConfig.s.sol | 6 +++--- packages/contracts-bedrock/scripts/deploy/Deployer.sol | 4 ++-- .../scripts/{ => fpac/viz}/FaultDisputeGameViz.s.sol | 0 .../scripts/{ => fpac/viz}/dag-viz.py | 0 .../scripts/{ => fpac/viz}/visualize.sh | 2 +- .../scripts/{ => libraries}/Chains.sol | 0 .../scripts/{ => libraries}/Config.sol | 0 .../scripts/{ => libraries}/Executables.sol | 0 .../scripts/{ => libraries}/ForgeArtifacts.sol | 2 +- .../scripts/{ => libraries}/Types.sol | 0 .../scripts/{ => ops}/FeeVaultWithdrawal.s.sol | 4 ++-- .../scripts/periphery/deploy/DeployPeriphery.s.sol | 2 +- .../scripts/periphery/drippie/ManageDrippie.s.sol | 2 +- .../scripts/{ => utils}/print-addresses.sh | 0 .../scripts/{ => utils}/restructure_tests.py | 0 .../contracts-bedrock/scripts/{ => utils}/statediff.sh | 0 .../contracts-bedrock/test/L2/GasPriceOracle.t.sol | 2 +- packages/contracts-bedrock/test/Predeploys.t.sol | 2 +- .../test/Safe/DeputyGuardianModule.t.sol | 2 +- packages/contracts-bedrock/test/Specs.t.sol | 4 ++-- packages/contracts-bedrock/test/setup/Setup.sol | 6 +++--- .../contracts-bedrock/test/vendor/Initializable.t.sol | 4 ++-- 28 files changed, 34 insertions(+), 34 deletions(-) rename packages/contracts-bedrock/scripts/{ => autogen}/SemverLock.s.sol (100%) rename packages/contracts-bedrock/scripts/{ => deploy}/ChainAssertions.sol (99%) rename packages/contracts-bedrock/scripts/{ => fpac/viz}/FaultDisputeGameViz.s.sol (100%) rename packages/contracts-bedrock/scripts/{ => fpac/viz}/dag-viz.py (100%) rename packages/contracts-bedrock/scripts/{ => fpac/viz}/visualize.sh (82%) rename packages/contracts-bedrock/scripts/{ => libraries}/Chains.sol (100%) rename packages/contracts-bedrock/scripts/{ => libraries}/Config.sol (100%) rename packages/contracts-bedrock/scripts/{ => libraries}/Executables.sol (100%) rename packages/contracts-bedrock/scripts/{ => libraries}/ForgeArtifacts.sol (99%) rename packages/contracts-bedrock/scripts/{ => libraries}/Types.sol (100%) rename packages/contracts-bedrock/scripts/{ => ops}/FeeVaultWithdrawal.s.sol (96%) rename packages/contracts-bedrock/scripts/{ => utils}/print-addresses.sh (100%) rename packages/contracts-bedrock/scripts/{ => utils}/restructure_tests.py (100%) rename packages/contracts-bedrock/scripts/{ => utils}/statediff.sh (100%) diff --git a/packages/contracts-bedrock/justfile b/packages/contracts-bedrock/justfile index c55cb3d381..45cdd14cfa 100644 --- a/packages/contracts-bedrock/justfile +++ b/packages/contracts-bedrock/justfile @@ -41,7 +41,7 @@ gas-snapshot-no-build: forge snapshot --match-contract GasBenchMark statediff: - ./scripts/statediff.sh && git diff --exit-code + ./scripts/utils/statediff.sh && git diff --exit-code gas-snapshot: build-go-ffi gas-snapshot-no-build @@ -65,7 +65,7 @@ snapshots-check: ./scripts/checks/check-snapshots.sh semver-lock: - forge script scripts/SemverLock.s.sol + forge script scripts/autogen/SemverLock.s.sol validate-deploy-configs: ./scripts/checks/check-deploy-configs.sh diff --git a/packages/contracts-bedrock/scripts/Artifacts.s.sol b/packages/contracts-bedrock/scripts/Artifacts.s.sol index 4a78860878..5b4bef26ec 100644 --- a/packages/contracts-bedrock/scripts/Artifacts.s.sol +++ b/packages/contracts-bedrock/scripts/Artifacts.s.sol @@ -4,13 +4,13 @@ pragma solidity ^0.8.0; import { console2 as console } from "forge-std/console2.sol"; import { stdJson } from "forge-std/StdJson.sol"; import { Vm } from "forge-std/Vm.sol"; -import { Executables } from "scripts/Executables.sol"; +import { Executables } from "scripts/libraries/Executables.sol"; import { Predeploys } from "src/libraries/Predeploys.sol"; -import { Config } from "scripts/Config.sol"; -import { StorageSlot } from "scripts/ForgeArtifacts.sol"; +import { Config } from "scripts/libraries/Config.sol"; +import { StorageSlot } from "scripts/libraries/ForgeArtifacts.sol"; import { EIP1967Helper } from "test/mocks/EIP1967Helper.sol"; import { LibString } from "@solady/utils/LibString.sol"; -import { ForgeArtifacts } from "scripts/ForgeArtifacts.sol"; +import { ForgeArtifacts } from "scripts/libraries/ForgeArtifacts.sol"; import { IAddressManager } from "scripts/interfaces/IAddressManager.sol"; import { Process } from "scripts/libraries/Process.sol"; diff --git a/packages/contracts-bedrock/scripts/L2Genesis.s.sol b/packages/contracts-bedrock/scripts/L2Genesis.s.sol index cad18b0b02..e154591669 100644 --- a/packages/contracts-bedrock/scripts/L2Genesis.s.sol +++ b/packages/contracts-bedrock/scripts/L2Genesis.s.sol @@ -5,7 +5,7 @@ import { Script } from "forge-std/Script.sol"; import { console2 as console } from "forge-std/console2.sol"; import { Deployer } from "scripts/deploy/Deployer.sol"; -import { Config, OutputMode, OutputModeUtils, Fork, ForkUtils, LATEST_FORK } from "scripts/Config.sol"; +import { Config, OutputMode, OutputModeUtils, Fork, ForkUtils, LATEST_FORK } from "scripts/libraries/Config.sol"; import { Artifacts } from "scripts/Artifacts.s.sol"; import { DeployConfig } from "scripts/deploy/DeployConfig.s.sol"; import { Predeploys } from "src/libraries/Predeploys.sol"; diff --git a/packages/contracts-bedrock/scripts/SemverLock.s.sol b/packages/contracts-bedrock/scripts/autogen/SemverLock.s.sol similarity index 100% rename from packages/contracts-bedrock/scripts/SemverLock.s.sol rename to packages/contracts-bedrock/scripts/autogen/SemverLock.s.sol diff --git a/packages/contracts-bedrock/scripts/ChainAssertions.sol b/packages/contracts-bedrock/scripts/deploy/ChainAssertions.sol similarity index 99% rename from packages/contracts-bedrock/scripts/ChainAssertions.sol rename to packages/contracts-bedrock/scripts/deploy/ChainAssertions.sol index b0245fc09f..cac489c93e 100644 --- a/packages/contracts-bedrock/scripts/ChainAssertions.sol +++ b/packages/contracts-bedrock/scripts/deploy/ChainAssertions.sol @@ -19,7 +19,7 @@ import { L1CrossDomainMessenger } from "src/L1/L1CrossDomainMessenger.sol"; import { OptimismMintableERC20Factory } from "src/universal/OptimismMintableERC20Factory.sol"; import { L1ERC721Bridge } from "src/L1/L1ERC721Bridge.sol"; import { Predeploys } from "src/libraries/Predeploys.sol"; -import { Types } from "scripts/Types.sol"; +import { Types } from "scripts/libraries/Types.sol"; import { Vm } from "forge-std/Vm.sol"; import { ISystemConfigV0 } from "scripts/interfaces/ISystemConfigV0.sol"; import { console2 as console } from "forge-std/console2.sol"; diff --git a/packages/contracts-bedrock/scripts/deploy/Deploy.s.sol b/packages/contracts-bedrock/scripts/deploy/Deploy.s.sol index 19816f94aa..73abe8956a 100644 --- a/packages/contracts-bedrock/scripts/deploy/Deploy.s.sol +++ b/packages/contracts-bedrock/scripts/deploy/Deploy.s.sol @@ -44,18 +44,18 @@ import { L1ERC721Bridge } from "src/L1/L1ERC721Bridge.sol"; import { ProtocolVersions, ProtocolVersion } from "src/L1/ProtocolVersions.sol"; import { StorageSetter } from "src/universal/StorageSetter.sol"; import { Predeploys } from "src/libraries/Predeploys.sol"; -import { Chains } from "scripts/Chains.sol"; -import { Config } from "scripts/Config.sol"; +import { Chains } from "scripts/libraries/Chains.sol"; +import { Config } from "scripts/libraries/Config.sol"; import { IBigStepper } from "src/dispute/interfaces/IBigStepper.sol"; import { IPreimageOracle } from "src/cannon/interfaces/IPreimageOracle.sol"; import { AlphabetVM } from "test/mocks/AlphabetVM.sol"; import "src/dispute/lib/Types.sol"; -import { ChainAssertions } from "scripts/ChainAssertions.sol"; -import { Types } from "scripts/Types.sol"; +import { ChainAssertions } from "scripts/deploy/ChainAssertions.sol"; +import { Types } from "scripts/libraries/Types.sol"; import { LibStateDiff } from "scripts/libraries/LibStateDiff.sol"; import { EIP1967Helper } from "test/mocks/EIP1967Helper.sol"; -import { ForgeArtifacts } from "scripts/ForgeArtifacts.sol"; +import { ForgeArtifacts } from "scripts/libraries/ForgeArtifacts.sol"; import { Process } from "scripts/libraries/Process.sol"; /// @title Deploy diff --git a/packages/contracts-bedrock/scripts/deploy/DeployConfig.s.sol b/packages/contracts-bedrock/scripts/deploy/DeployConfig.s.sol index 76d4ad43ee..d720986fcd 100644 --- a/packages/contracts-bedrock/scripts/deploy/DeployConfig.s.sol +++ b/packages/contracts-bedrock/scripts/deploy/DeployConfig.s.sol @@ -4,10 +4,10 @@ pragma solidity 0.8.15; import { Script } from "forge-std/Script.sol"; import { console2 as console } from "forge-std/console2.sol"; import { stdJson } from "forge-std/StdJson.sol"; -import { Executables } from "scripts/Executables.sol"; +import { Executables } from "scripts/libraries/Executables.sol"; import { Process } from "scripts/libraries/Process.sol"; -import { Chains } from "scripts/Chains.sol"; -import { Config, Fork, ForkUtils } from "scripts/Config.sol"; +import { Chains } from "scripts/libraries/Chains.sol"; +import { Config, Fork, ForkUtils } from "scripts/libraries/Config.sol"; /// @title DeployConfig /// @notice Represents the configuration required to deploy the system. It is expected diff --git a/packages/contracts-bedrock/scripts/deploy/Deployer.sol b/packages/contracts-bedrock/scripts/deploy/Deployer.sol index 2a861ba346..36de8dd440 100644 --- a/packages/contracts-bedrock/scripts/deploy/Deployer.sol +++ b/packages/contracts-bedrock/scripts/deploy/Deployer.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.0; import { Script } from "forge-std/Script.sol"; import { Artifacts } from "scripts/Artifacts.s.sol"; -import { Config } from "scripts/Config.sol"; +import { Config } from "scripts/libraries/Config.sol"; import { DeployConfig } from "scripts/deploy/DeployConfig.s.sol"; -import { Executables } from "scripts/Executables.sol"; +import { Executables } from "scripts/libraries/Executables.sol"; import { console } from "forge-std/console.sol"; /// @title Deployer diff --git a/packages/contracts-bedrock/scripts/FaultDisputeGameViz.s.sol b/packages/contracts-bedrock/scripts/fpac/viz/FaultDisputeGameViz.s.sol similarity index 100% rename from packages/contracts-bedrock/scripts/FaultDisputeGameViz.s.sol rename to packages/contracts-bedrock/scripts/fpac/viz/FaultDisputeGameViz.s.sol diff --git a/packages/contracts-bedrock/scripts/dag-viz.py b/packages/contracts-bedrock/scripts/fpac/viz/dag-viz.py similarity index 100% rename from packages/contracts-bedrock/scripts/dag-viz.py rename to packages/contracts-bedrock/scripts/fpac/viz/dag-viz.py diff --git a/packages/contracts-bedrock/scripts/visualize.sh b/packages/contracts-bedrock/scripts/fpac/viz/visualize.sh similarity index 82% rename from packages/contracts-bedrock/scripts/visualize.sh rename to packages/contracts-bedrock/scripts/fpac/viz/visualize.sh index 4fb3078ebe..f0ecf872aa 100644 --- a/packages/contracts-bedrock/scripts/visualize.sh +++ b/packages/contracts-bedrock/scripts/fpac/viz/visualize.sh @@ -8,6 +8,6 @@ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DIR="${DIR%/*}" cd "$DIR" -forge script scripts/FaultDisputeGameViz.s.sol \ +forge script scripts/fpac/viz/FaultDisputeGameViz.s.sol \ --sig "remote(address)" "$FAULT_GAME_ADDRESS" \ --fork-url "$RPC" diff --git a/packages/contracts-bedrock/scripts/Chains.sol b/packages/contracts-bedrock/scripts/libraries/Chains.sol similarity index 100% rename from packages/contracts-bedrock/scripts/Chains.sol rename to packages/contracts-bedrock/scripts/libraries/Chains.sol diff --git a/packages/contracts-bedrock/scripts/Config.sol b/packages/contracts-bedrock/scripts/libraries/Config.sol similarity index 100% rename from packages/contracts-bedrock/scripts/Config.sol rename to packages/contracts-bedrock/scripts/libraries/Config.sol diff --git a/packages/contracts-bedrock/scripts/Executables.sol b/packages/contracts-bedrock/scripts/libraries/Executables.sol similarity index 100% rename from packages/contracts-bedrock/scripts/Executables.sol rename to packages/contracts-bedrock/scripts/libraries/Executables.sol diff --git a/packages/contracts-bedrock/scripts/ForgeArtifacts.sol b/packages/contracts-bedrock/scripts/libraries/ForgeArtifacts.sol similarity index 99% rename from packages/contracts-bedrock/scripts/ForgeArtifacts.sol rename to packages/contracts-bedrock/scripts/libraries/ForgeArtifacts.sol index 9886f9cd9b..315ed6d0c5 100644 --- a/packages/contracts-bedrock/scripts/ForgeArtifacts.sol +++ b/packages/contracts-bedrock/scripts/libraries/ForgeArtifacts.sol @@ -2,8 +2,8 @@ pragma solidity ^0.8.0; import { Vm } from "forge-std/Vm.sol"; -import { Executables } from "scripts/Executables.sol"; import { stdJson } from "forge-std/StdJson.sol"; +import { Executables } from "scripts/libraries/Executables.sol"; import { Process } from "scripts/libraries/Process.sol"; /// @notice Contains information about a storage slot. Mirrors the layout of the storage diff --git a/packages/contracts-bedrock/scripts/Types.sol b/packages/contracts-bedrock/scripts/libraries/Types.sol similarity index 100% rename from packages/contracts-bedrock/scripts/Types.sol rename to packages/contracts-bedrock/scripts/libraries/Types.sol diff --git a/packages/contracts-bedrock/scripts/FeeVaultWithdrawal.s.sol b/packages/contracts-bedrock/scripts/ops/FeeVaultWithdrawal.s.sol similarity index 96% rename from packages/contracts-bedrock/scripts/FeeVaultWithdrawal.s.sol rename to packages/contracts-bedrock/scripts/ops/FeeVaultWithdrawal.s.sol index f16cc994a4..e19cd7e994 100644 --- a/packages/contracts-bedrock/scripts/FeeVaultWithdrawal.s.sol +++ b/packages/contracts-bedrock/scripts/ops/FeeVaultWithdrawal.s.sol @@ -3,9 +3,9 @@ pragma solidity 0.8.15; import { console } from "forge-std/console.sol"; import { Script } from "forge-std/Script.sol"; -import { Predeploys } from "../src/libraries/Predeploys.sol"; -import { FeeVault } from "../src/universal/FeeVault.sol"; import { IMulticall3 } from "forge-std/interfaces/IMulticall3.sol"; +import { Predeploys } from "src/libraries/Predeploys.sol"; +import { FeeVault } from "src/universal/FeeVault.sol"; /// @title FeeVaultWithdrawal /// @notice A script to make it very simple to withdraw from the fee vaults. diff --git a/packages/contracts-bedrock/scripts/periphery/deploy/DeployPeriphery.s.sol b/packages/contracts-bedrock/scripts/periphery/deploy/DeployPeriphery.s.sol index 834af21231..856104eb27 100644 --- a/packages/contracts-bedrock/scripts/periphery/deploy/DeployPeriphery.s.sol +++ b/packages/contracts-bedrock/scripts/periphery/deploy/DeployPeriphery.s.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import { console2 as console } from "forge-std/console2.sol"; import { Script } from "forge-std/Script.sol"; -import { Config } from "scripts/Config.sol"; +import { Config } from "scripts/libraries/Config.sol"; import { Artifacts } from "scripts/Artifacts.s.sol"; import { PeripheryDeployConfig } from "scripts/periphery/deploy/PeripheryDeployConfig.s.sol"; diff --git a/packages/contracts-bedrock/scripts/periphery/drippie/ManageDrippie.s.sol b/packages/contracts-bedrock/scripts/periphery/drippie/ManageDrippie.s.sol index b41142ba80..1ae5f9ab01 100644 --- a/packages/contracts-bedrock/scripts/periphery/drippie/ManageDrippie.s.sol +++ b/packages/contracts-bedrock/scripts/periphery/drippie/ManageDrippie.s.sol @@ -11,7 +11,7 @@ import { LibDataTypes as GelatoDataTypes } from "gelato/libraries/LibDataTypes.s import { LibTaskId as GelatoTaskId } from "gelato/libraries/LibTaskId.sol"; import { GelatoBytes } from "gelato/vendor/gelato/GelatoBytes.sol"; -import { Config } from "scripts/Config.sol"; +import { Config } from "scripts/libraries/Config.sol"; import { Artifacts } from "scripts/Artifacts.s.sol"; import { DrippieConfig } from "scripts/periphery/drippie/DrippieConfig.s.sol"; diff --git a/packages/contracts-bedrock/scripts/print-addresses.sh b/packages/contracts-bedrock/scripts/utils/print-addresses.sh similarity index 100% rename from packages/contracts-bedrock/scripts/print-addresses.sh rename to packages/contracts-bedrock/scripts/utils/print-addresses.sh diff --git a/packages/contracts-bedrock/scripts/restructure_tests.py b/packages/contracts-bedrock/scripts/utils/restructure_tests.py similarity index 100% rename from packages/contracts-bedrock/scripts/restructure_tests.py rename to packages/contracts-bedrock/scripts/utils/restructure_tests.py diff --git a/packages/contracts-bedrock/scripts/statediff.sh b/packages/contracts-bedrock/scripts/utils/statediff.sh similarity index 100% rename from packages/contracts-bedrock/scripts/statediff.sh rename to packages/contracts-bedrock/scripts/utils/statediff.sh diff --git a/packages/contracts-bedrock/test/L2/GasPriceOracle.t.sol b/packages/contracts-bedrock/test/L2/GasPriceOracle.t.sol index 21f7b98f66..f81d96b040 100644 --- a/packages/contracts-bedrock/test/L2/GasPriceOracle.t.sol +++ b/packages/contracts-bedrock/test/L2/GasPriceOracle.t.sol @@ -3,7 +3,7 @@ pragma solidity 0.8.15; // Testing utilities import { CommonTest } from "test/setup/CommonTest.sol"; -import { Fork } from "scripts/Config.sol"; +import { Fork } from "scripts/libraries/Config.sol"; // Libraries import { Encoding } from "src/libraries/Encoding.sol"; diff --git a/packages/contracts-bedrock/test/Predeploys.t.sol b/packages/contracts-bedrock/test/Predeploys.t.sol index df7c2e3229..d39eb8b0ff 100644 --- a/packages/contracts-bedrock/test/Predeploys.t.sol +++ b/packages/contracts-bedrock/test/Predeploys.t.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.15; import { CommonTest } from "test/setup/CommonTest.sol"; -import { ForgeArtifacts } from "scripts/ForgeArtifacts.sol"; +import { ForgeArtifacts } from "scripts/libraries/ForgeArtifacts.sol"; import { EIP1967Helper } from "test/mocks/EIP1967Helper.sol"; import { Predeploys } from "src/libraries/Predeploys.sol"; diff --git a/packages/contracts-bedrock/test/Safe/DeputyGuardianModule.t.sol b/packages/contracts-bedrock/test/Safe/DeputyGuardianModule.t.sol index ba91387352..3260249773 100644 --- a/packages/contracts-bedrock/test/Safe/DeputyGuardianModule.t.sol +++ b/packages/contracts-bedrock/test/Safe/DeputyGuardianModule.t.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.15; import { CommonTest } from "test/setup/CommonTest.sol"; -import { ForgeArtifacts, Abi } from "scripts/ForgeArtifacts.sol"; +import { ForgeArtifacts, Abi } from "scripts/libraries/ForgeArtifacts.sol"; import { GnosisSafe as Safe } from "safe-contracts/GnosisSafe.sol"; import "test/safe-tools/SafeTestTools.sol"; diff --git a/packages/contracts-bedrock/test/Specs.t.sol b/packages/contracts-bedrock/test/Specs.t.sol index 466be3ab84..4c87fb82e4 100644 --- a/packages/contracts-bedrock/test/Specs.t.sol +++ b/packages/contracts-bedrock/test/Specs.t.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.15; import { CommonTest } from "test/setup/CommonTest.sol"; -import { Executables } from "scripts/Executables.sol"; +import { Executables } from "scripts/libraries/Executables.sol"; import { console2 as console } from "forge-std/console2.sol"; import { ProtocolVersions } from "src/L1/ProtocolVersions.sol"; import { OptimismPortal } from "src/L1/OptimismPortal.sol"; @@ -11,7 +11,7 @@ import { OptimismPortal2 } from "src/L1/OptimismPortal2.sol"; import { SystemConfig } from "src/L1/SystemConfig.sol"; import { DataAvailabilityChallenge } from "src/L1/DataAvailabilityChallenge.sol"; import { OPStackManager } from "src/L1/OPStackManager.sol"; -import { ForgeArtifacts, Abi, AbiEntry } from "scripts/ForgeArtifacts.sol"; +import { ForgeArtifacts, Abi, AbiEntry } from "scripts/libraries/ForgeArtifacts.sol"; /// @title Specification_Test /// @dev Specifies common security properties of entrypoints to L1 contracts, including authorization and diff --git a/packages/contracts-bedrock/test/setup/Setup.sol b/packages/contracts-bedrock/test/setup/Setup.sol index 537585d710..50052dfd14 100644 --- a/packages/contracts-bedrock/test/setup/Setup.sol +++ b/packages/contracts-bedrock/test/setup/Setup.sol @@ -26,9 +26,9 @@ import { AnchorStateRegistry } from "src/dispute/AnchorStateRegistry.sol"; import { L1CrossDomainMessenger } from "src/L1/L1CrossDomainMessenger.sol"; import { DeployConfig } from "scripts/deploy/DeployConfig.s.sol"; import { Deploy } from "scripts/deploy/Deploy.s.sol"; -import { Fork, LATEST_FORK } from "scripts/Config.sol"; +import { Fork, LATEST_FORK } from "scripts/libraries/Config.sol"; import { L2Genesis, L1Dependencies } from "scripts/L2Genesis.s.sol"; -import { OutputMode, Fork, ForkUtils } from "scripts/Config.sol"; +import { OutputMode, Fork, ForkUtils } from "scripts/libraries/Config.sol"; import { L2OutputOracle } from "src/L1/L2OutputOracle.sol"; import { ProtocolVersions } from "src/L1/ProtocolVersions.sol"; import { SystemConfig } from "src/L1/SystemConfig.sol"; @@ -36,7 +36,7 @@ import { L1StandardBridge } from "src/L1/L1StandardBridge.sol"; import { AddressManager } from "src/legacy/AddressManager.sol"; import { L1ERC721Bridge } from "src/L1/L1ERC721Bridge.sol"; import { AddressAliasHelper } from "src/vendor/AddressAliasHelper.sol"; -import { Executables } from "scripts/Executables.sol"; +import { Executables } from "scripts/libraries/Executables.sol"; import { Vm } from "forge-std/Vm.sol"; import { SuperchainConfig } from "src/L1/SuperchainConfig.sol"; import { DataAvailabilityChallenge } from "src/L1/DataAvailabilityChallenge.sol"; diff --git a/packages/contracts-bedrock/test/vendor/Initializable.t.sol b/packages/contracts-bedrock/test/vendor/Initializable.t.sol index 05fff737bd..73177a36f1 100644 --- a/packages/contracts-bedrock/test/vendor/Initializable.t.sol +++ b/packages/contracts-bedrock/test/vendor/Initializable.t.sol @@ -2,14 +2,14 @@ pragma solidity 0.8.15; import { Bridge_Initializer } from "test/setup/Bridge_Initializer.sol"; -import { Executables } from "scripts/Executables.sol"; +import { Executables } from "scripts/libraries/Executables.sol"; import { CrossDomainMessenger } from "src/universal/CrossDomainMessenger.sol"; import { L2OutputOracle } from "src/L1/L2OutputOracle.sol"; import { SystemConfig } from "src/L1/SystemConfig.sol"; import { SuperchainConfig } from "src/L1/SuperchainConfig.sol"; import { ResourceMetering } from "src/L1/ResourceMetering.sol"; import { OptimismPortal } from "src/L1/OptimismPortal.sol"; -import { ForgeArtifacts } from "scripts/ForgeArtifacts.sol"; +import { ForgeArtifacts } from "scripts/libraries/ForgeArtifacts.sol"; import { Process } from "scripts/libraries/Process.sol"; import "src/L1/ProtocolVersions.sol"; import "src/dispute/lib/Types.sol";