From 8c391bc8a8c29f8626cf665b2d0216ad24c28343 Mon Sep 17 00:00:00 2001 From: Jordan Krage Date: Tue, 11 Aug 2026 14:24:13 -0500 Subject: [PATCH] integration_tests: rm module --- .github/actions/setup-testdb/action.yml | 3 +- .github/scripts/affected-projects.sh | 4 - .github/workflows/CI.yaml | 5 - .github/workflows/integration-tests.yml | 48 - .golangci.yml | 3 - README.md | 2 +- go.md | 184 +- integration_tests/README.md | 22 - integration_tests/consensus/consensus_test.go | 195 -- .../consensus/workflow/main_wasip1.go | 58 - integration_tests/cron/cron_test.go | 96 - integration_tests/cron/setup.go | 53 - integration_tests/cron/workflow.go | 52 - .../evm/contract/MessageEmitter.abi | 1 - .../evm/contract/MessageEmitter.bin | 1 - .../evm/contract/MessageEmitter.go | 542 ----- .../evm/contract/MessageEmitter.sol | 28 - integration_tests/evm/contract/readme.md | 16 - integration_tests/evm/evm_logtrigger_test.go | 660 ------ integration_tests/evm/logTriggerConfig.go | 13 - .../evm/workflow/main_logtrigger_wasip1.go | 136 -- integration_tests/go.mod | 437 ---- integration_tests/go.sum | 2016 ----------------- .../http/gateway_config_test_helpers.go | 122 - .../http/http_action_routing_test.go | 217 -- integration_tests/http/http_test.go | 448 ---- integration_tests/http/http_trigger_test.go | 388 ---- integration_tests/http/kvstore.go | 44 - integration_tests/integrationtestsdiagram.png | Bin 277297 -> 0 bytes integration_tests/project.json | 30 - .../scripts/killAllZombieTestProcesses.sh | 1 - integration_tests/utils/cron.go | 22 - integration_tests/utils/deploy.go | 39 - integration_tests/utils/fetcher.go | 19 - integration_tests/utils/wasm.go | 36 - sonar-project.properties | 2 - 36 files changed, 13 insertions(+), 5930 deletions(-) delete mode 100644 .github/workflows/integration-tests.yml delete mode 100644 integration_tests/README.md delete mode 100644 integration_tests/consensus/consensus_test.go delete mode 100644 integration_tests/consensus/workflow/main_wasip1.go delete mode 100644 integration_tests/cron/cron_test.go delete mode 100644 integration_tests/cron/setup.go delete mode 100644 integration_tests/cron/workflow.go delete mode 100644 integration_tests/evm/contract/MessageEmitter.abi delete mode 100644 integration_tests/evm/contract/MessageEmitter.bin delete mode 100644 integration_tests/evm/contract/MessageEmitter.go delete mode 100644 integration_tests/evm/contract/MessageEmitter.sol delete mode 100644 integration_tests/evm/contract/readme.md delete mode 100644 integration_tests/evm/evm_logtrigger_test.go delete mode 100644 integration_tests/evm/logTriggerConfig.go delete mode 100644 integration_tests/evm/workflow/main_logtrigger_wasip1.go delete mode 100644 integration_tests/go.mod delete mode 100644 integration_tests/go.sum delete mode 100644 integration_tests/http/gateway_config_test_helpers.go delete mode 100644 integration_tests/http/http_action_routing_test.go delete mode 100644 integration_tests/http/http_test.go delete mode 100644 integration_tests/http/http_trigger_test.go delete mode 100644 integration_tests/http/kvstore.go delete mode 100644 integration_tests/integrationtestsdiagram.png delete mode 100644 integration_tests/project.json delete mode 100755 integration_tests/scripts/killAllZombieTestProcesses.sh delete mode 100644 integration_tests/utils/cron.go delete mode 100644 integration_tests/utils/deploy.go delete mode 100644 integration_tests/utils/fetcher.go delete mode 100644 integration_tests/utils/wasm.go diff --git a/.github/actions/setup-testdb/action.yml b/.github/actions/setup-testdb/action.yml index 6f8ab3ec0..b34771342 100644 --- a/.github/actions/setup-testdb/action.yml +++ b/.github/actions/setup-testdb/action.yml @@ -19,7 +19,8 @@ runs: working-directory: ${{ github.action_path }}/../setup-postgres - name: Prepare Test Schema - run: go -C integration_tests tool preparetest + run: | + go -C $(go mod download -json github.com/smartcontractkit/chainlink/v2@latest | jq -r '.Dir') run ./core/store/cmd/preparetest shell: bash env: CL_DATABASE_URL: postgresql://postgres:postgres@localhost:5432/chainlink_test?sslmode=disable diff --git a/.github/scripts/affected-projects.sh b/.github/scripts/affected-projects.sh index f5b14c83a..76e5739ba 100755 --- a/.github/scripts/affected-projects.sh +++ b/.github/scripts/affected-projects.sh @@ -38,10 +38,6 @@ for target in "${targets[@]}"; do # Add --head=HEAD to ensure consistency (compared against --base) projects_with_target=$(./nx show projects --affected -t $target --json --base=$base --head=HEAD) - if [ "$target" == "test" ]; then - projects_with_target=$(echo $projects_with_target | jq 'del(.[] | select(. == "integration_tests"))') - fi - json_output=$(echo "$json_output" | jq --argjson target_projects "$projects_with_target" --arg target "$target" \ '. + {"projects_with_\($target)": $target_projects}') diff --git a/.github/workflows/CI.yaml b/.github/workflows/CI.yaml index 594161034..0117fd985 100644 --- a/.github/workflows/CI.yaml +++ b/.github/workflows/CI.yaml @@ -194,10 +194,6 @@ jobs: if: matrix.projects != 'solana' run: ./nx run ${{ matrix.projects }}:race - - integration-tests: - uses: ./.github/workflows/integration-tests.yml - tidy-and-generate: needs: affected if: ${{fromJson(needs.affected.outputs.nx).run_checks}} @@ -312,7 +308,6 @@ jobs: - test - race - tidy-and-generate - - integration-tests - modgraph if: always() steps: diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml deleted file mode 100644 index 82c921ef7..000000000 --- a/.github/workflows/integration-tests.yml +++ /dev/null @@ -1,48 +0,0 @@ -name: Integration Tests - -on: - workflow_call: - -env: - GOPRIVATE: github.com/smartcontractkit/capabilities - -permissions: - contents: read - -jobs: - integration-test: - runs-on: ubuntu-latest - env: - DB_URL: postgresql://postgres:postgres@localhost:5432/chainlink_test?sslmode=disable - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - persist-credentials: false - - - name: Setup Postgres - uses: ./.github/actions/setup-postgres - - - name: Set up project environment - uses: ./.github/actions/setup - with: - project: integration_tests - go-module-file: ./integration_tests/go.mod - task: "integrationtest" - - - name: Support private Go modules - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: ./.github/scripts/support-private-gomods.sh - - - name: Setup Tests DB - shell: bash - run: go -C integration_tests tool preparetest - env: - CL_DATABASE_URL: ${{ env.DB_URL }} - - - name: Run Integration Tests - env: - CL_DATABASE_URL: ${{ env.DB_URL }} - run: ./nx run integration_tests:test diff --git a/.golangci.yml b/.golangci.yml index 1531aa24b..0788ba9af 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -171,9 +171,6 @@ linters: - gosec path: test text: "^G404:" - - linters: - - depguard - path: integration_tests paths: - third_party$ - builtin$ diff --git a/README.md b/README.md index 08998d7b9..c36e10dde 100644 --- a/README.md +++ b/README.md @@ -125,7 +125,7 @@ Run a task for the affected projects only: Update libs for chain capabilities: ```sh -nx run-many -t update-libs -p aptos,solana,evm,stellar --args='--version=v1.2.3' && nx run integration_tests:tidy +nx run-many -t update-libs -p aptos,solana,evm,stellar --args='--version=v1.2.3' ``` [More info on Nx Tasks](https://nx.dev/features/run-tasks). diff --git a/go.md b/go.md index cd49b9dd4..dde0d7a00 100644 --- a/go.md +++ b/go.md @@ -25,63 +25,21 @@ flowchart LR click capabilities/http_action href "https://github.com/smartcontractkit/capabilities" capabilities/http_trigger --> capabilities/libs click capabilities/http_trigger href "https://github.com/smartcontractkit/capabilities" - capabilities/integration_tests --> capabilities/chain_capabilities/evm - capabilities/integration_tests --> capabilities/http_action - capabilities/integration_tests --> capabilities/http_trigger - capabilities/integration_tests --> chainlink/v2 - capabilities/integration_tests --> cre-sdk-go/capabilities/blockchain/evm - click capabilities/integration_tests href "https://github.com/smartcontractkit/capabilities" capabilities/libs --> chainlink-common click capabilities/libs href "https://github.com/smartcontractkit/capabilities" - ccip-contract-examples/chains/evm - click ccip-contract-examples/chains/evm href "https://github.com/smartcontractkit/ccip-contract-examples" - ccip-owner-contracts - click ccip-owner-contracts href "https://github.com/smartcontractkit/ccip-owner-contracts" chain-selectors click chain-selectors href "https://github.com/smartcontractkit/chain-selectors" chainlink-aptos --> chainlink-common click chainlink-aptos href "https://github.com/smartcontractkit/chainlink-aptos" - chainlink-aptos/codec --> chainlink-common - click chainlink-aptos/codec href "https://github.com/smartcontractkit/chainlink-aptos" - chainlink-automation --> chainlink-common - click chainlink-automation href "https://github.com/smartcontractkit/chainlink-automation" chainlink-ccip --> chainlink-common chainlink-ccip --> chainlink-evm/gethwrappers/helpers chainlink-ccip --> chainlink-protos/rmn/v1.6/go click chainlink-ccip href "https://github.com/smartcontractkit/chainlink-ccip" - chainlink-ccip/chains/evm --> ccip-contract-examples/chains/evm - chainlink-ccip/chains/evm --> ccip-owner-contracts - chainlink-ccip/chains/evm --> chainlink-aptos - chainlink-ccip/chains/evm --> chainlink-ccip/deployment - chainlink-ccip/chains/evm --> chainlink-ccv - chainlink-ccip/chains/evm --> chainlink-ccv/deployment - chainlink-ccip/chains/evm --> chainlink-deployments-framework - chainlink-ccip/chains/evm --> chainlink-protos/job-distributor - chainlink-ccip/chains/evm --> chainlink-protos/op-catalog - chainlink-ccip/chains/evm --> chainlink-sui - chainlink-ccip/chains/evm --> chainlink-testing-framework/seth - chainlink-ccip/chains/evm --> chainlink-ton - chainlink-ccip/chains/evm --> mcms - click chainlink-ccip/chains/evm href "https://github.com/smartcontractkit/chainlink-ccip" chainlink-ccip/chains/solana --> chainlink-ccip/chains/solana/gobindings chainlink-ccip/chains/solana --> chainlink-common click chainlink-ccip/chains/solana href "https://github.com/smartcontractkit/chainlink-ccip" chainlink-ccip/chains/solana/gobindings click chainlink-ccip/chains/solana/gobindings href "https://github.com/smartcontractkit/chainlink-ccip" - chainlink-ccip/deployment - click chainlink-ccip/deployment href "https://github.com/smartcontractkit/chainlink-ccip" - chainlink-ccv --> chainlink-ccip/chains/evm - chainlink-ccv --> chainlink-evm - chainlink-ccv --> chainlink-protos/chainlink-ccv/committee-verifier - chainlink-ccv --> chainlink-protos/chainlink-ccv/heartbeat - chainlink-ccv --> chainlink-protos/chainlink-ccv/message-discovery - chainlink-ccv --> chainlink-protos/chainlink-ccv/message-rules - chainlink-ccv --> chainlink-protos/orchestrator - chainlink-ccv --> chainlink-solana - chainlink-ccv --> chainlink-testing-framework/framework - click chainlink-ccv href "https://github.com/smartcontractkit/chainlink-ccv" - chainlink-ccv/deployment - click chainlink-ccv/deployment href "https://github.com/smartcontractkit/chainlink-ccv" chainlink-common --> chainlink-common/pkg/chipingress chainlink-common --> chainlink-protos/billing/go chainlink-common --> chainlink-protos/cre/go @@ -89,6 +47,7 @@ flowchart LR chainlink-common --> chainlink-protos/metering/go chainlink-common --> chainlink-protos/node-platform chainlink-common --> chainlink-protos/storage-service + chainlink-common --> chainlink-protos/workflows/go chainlink-common --> freeport chainlink-common --> grpc-proxy chainlink-common --> libocr @@ -101,27 +60,23 @@ flowchart LR click chainlink-common/pkg/chipingress href "https://github.com/smartcontractkit/chainlink-common" chainlink-common/pkg/monitoring click chainlink-common/pkg/monitoring href "https://github.com/smartcontractkit/chainlink-common" - chainlink-data-streams --> chainlink-common/keystore - chainlink-data-streams --> chainlink-evm/gethwrappers + chainlink-data-streams click chainlink-data-streams href "https://github.com/smartcontractkit/chainlink-data-streams" chainlink-deployments-framework click chainlink-deployments-framework href "https://github.com/smartcontractkit/chainlink-deployments-framework" - chainlink-evm --> chainlink-automation + chainlink-evm --> chainlink-common/keystore chainlink-evm --> chainlink-data-streams + chainlink-evm --> chainlink-evm/gethwrappers chainlink-evm --> chainlink-framework/capabilities chainlink-evm --> chainlink-framework/chains chainlink-evm --> chainlink-protos/svr chainlink-evm --> chainlink-tron/relayer click chainlink-evm href "https://github.com/smartcontractkit/chainlink-evm" - chainlink-evm/contracts/cre/gobindings --> chainlink-evm/gethwrappers/helpers - click chainlink-evm/contracts/cre/gobindings href "https://github.com/smartcontractkit/chainlink-evm" - chainlink-evm/gethwrappers --> chainlink-evm/gethwrappers/helpers + chainlink-evm/gethwrappers click chainlink-evm/gethwrappers href "https://github.com/smartcontractkit/chainlink-evm" chainlink-evm/gethwrappers/helpers click chainlink-evm/gethwrappers/helpers href "https://github.com/smartcontractkit/chainlink-evm" - chainlink-feeds --> chainlink-common - click chainlink-feeds href "https://github.com/smartcontractkit/chainlink-feeds" - chainlink-framework/capabilities --> chainlink-common + chainlink-framework/capabilities click chainlink-framework/capabilities href "https://github.com/smartcontractkit/chainlink-framework" chainlink-framework/chains --> chainlink-framework/multinode click chainlink-framework/chains href "https://github.com/smartcontractkit/chainlink-framework" @@ -129,36 +84,16 @@ flowchart LR click chainlink-framework/metrics href "https://github.com/smartcontractkit/chainlink-framework" chainlink-framework/multinode --> chainlink-framework/metrics click chainlink-framework/multinode href "https://github.com/smartcontractkit/chainlink-framework" - chainlink-protos/billing/go --> chainlink-protos/workflows/go + chainlink-protos/billing/go click chainlink-protos/billing/go href "https://github.com/smartcontractkit/chainlink-protos" - chainlink-protos/chainlink-ccv/committee-verifier --> chainlink-protos/chainlink-ccv/verifier - click chainlink-protos/chainlink-ccv/committee-verifier href "https://github.com/smartcontractkit/chainlink-protos" - chainlink-protos/chainlink-ccv/heartbeat - click chainlink-protos/chainlink-ccv/heartbeat href "https://github.com/smartcontractkit/chainlink-protos" - chainlink-protos/chainlink-ccv/message-discovery --> chainlink-protos/chainlink-ccv/verifier - click chainlink-protos/chainlink-ccv/message-discovery href "https://github.com/smartcontractkit/chainlink-protos" - chainlink-protos/chainlink-ccv/message-rules - click chainlink-protos/chainlink-ccv/message-rules href "https://github.com/smartcontractkit/chainlink-protos" - chainlink-protos/chainlink-ccv/verifier - click chainlink-protos/chainlink-ccv/verifier href "https://github.com/smartcontractkit/chainlink-protos" chainlink-protos/cre/go --> chain-selectors click chainlink-protos/cre/go href "https://github.com/smartcontractkit/chainlink-protos" - chainlink-protos/data-feeds - click chainlink-protos/data-feeds href "https://github.com/smartcontractkit/chainlink-protos" - chainlink-protos/job-distributor - click chainlink-protos/job-distributor href "https://github.com/smartcontractkit/chainlink-protos" chainlink-protos/linking-service/go click chainlink-protos/linking-service/go href "https://github.com/smartcontractkit/chainlink-protos" chainlink-protos/metering/go click chainlink-protos/metering/go href "https://github.com/smartcontractkit/chainlink-protos" chainlink-protos/node-platform click chainlink-protos/node-platform href "https://github.com/smartcontractkit/chainlink-protos" - chainlink-protos/op-catalog - click chainlink-protos/op-catalog href "https://github.com/smartcontractkit/chainlink-protos" - chainlink-protos/orchestrator --> wsrpc - click chainlink-protos/orchestrator href "https://github.com/smartcontractkit/chainlink-protos" - chainlink-protos/ring/go - click chainlink-protos/ring/go href "https://github.com/smartcontractkit/chainlink-protos" chainlink-protos/rmn/v1.6/go click chainlink-protos/rmn/v1.6/go href "https://github.com/smartcontractkit/chainlink-protos" chainlink-protos/storage-service @@ -178,45 +113,12 @@ flowchart LR chainlink-solana/contracts --> chainlink-testing-framework/framework chainlink-solana/contracts --> chainlink-tron/relayer click chainlink-solana/contracts href "https://github.com/smartcontractkit/chainlink-solana" - chainlink-sui - click chainlink-sui href "https://github.com/smartcontractkit/chainlink-sui" - chainlink-sui/codec --> chainlink-common - click chainlink-sui/codec href "https://github.com/smartcontractkit/chainlink-sui" chainlink-testing-framework/framework click chainlink-testing-framework/framework href "https://github.com/smartcontractkit/chainlink-testing-framework" - chainlink-testing-framework/seth - click chainlink-testing-framework/seth href "https://github.com/smartcontractkit/chainlink-testing-framework" - chainlink-ton - click chainlink-ton href "https://github.com/smartcontractkit/chainlink-ton" - chainlink-ton/cciplib --> chainlink-common - click chainlink-ton/cciplib href "https://github.com/smartcontractkit/chainlink-ton" - chainlink-tron/relayer --> chainlink-common + chainlink-tron/relayer click chainlink-tron/relayer href "https://github.com/smartcontractkit/chainlink-tron" - chainlink/v2 --> chainlink-aptos/codec - chainlink/v2 --> chainlink-evm/contracts/cre/gobindings - chainlink/v2 --> chainlink-feeds - chainlink/v2 --> chainlink-protos/chainlink-ccv/committee-verifier - chainlink/v2 --> chainlink-protos/chainlink-ccv/heartbeat - chainlink/v2 --> chainlink-protos/chainlink-ccv/message-discovery - chainlink/v2 --> chainlink-protos/chainlink-ccv/message-rules - chainlink/v2 --> chainlink-protos/data-feeds - chainlink/v2 --> chainlink-protos/ring/go - chainlink/v2 --> chainlink-protos/svr - chainlink/v2 --> chainlink-sui/codec - chainlink/v2 --> chainlink-ton/cciplib - chainlink/v2 --> chainlink-tron/relayer - chainlink/v2 --> cre-sdk-go/capabilities/networking/http - chainlink/v2 --> cre-sdk-go/capabilities/scheduler/cron - chainlink/v2 --> tdh2/go/ocr2/decryptionplugin - click chainlink/v2 href "https://github.com/smartcontractkit/chainlink" cre-sdk-go --> chainlink-protos/cre/go click cre-sdk-go href "https://github.com/smartcontractkit/cre-sdk-go" - cre-sdk-go/capabilities/blockchain/evm --> cre-sdk-go - click cre-sdk-go/capabilities/blockchain/evm href "https://github.com/smartcontractkit/cre-sdk-go" - cre-sdk-go/capabilities/networking/http - click cre-sdk-go/capabilities/networking/http href "https://github.com/smartcontractkit/cre-sdk-go" - cre-sdk-go/capabilities/scheduler/cron --> cre-sdk-go - click cre-sdk-go/capabilities/scheduler/cron href "https://github.com/smartcontractkit/cre-sdk-go" freeport click freeport href "https://github.com/smartcontractkit/freeport" go-sumtype2 @@ -225,16 +127,8 @@ flowchart LR click grpc-proxy href "https://github.com/smartcontractkit/grpc-proxy" libocr --> go-sumtype2 click libocr href "https://github.com/smartcontractkit/libocr" - mcms - click mcms href "https://github.com/smartcontractkit/mcms" - smdkg --> libocr - smdkg --> tdh2/go/tdh2 + smdkg click smdkg href "https://github.com/smartcontractkit/smdkg" - tdh2/go/ocr2/decryptionplugin --> libocr - tdh2/go/ocr2/decryptionplugin --> tdh2/go/tdh2 - click tdh2/go/ocr2/decryptionplugin href "https://github.com/smartcontractkit/tdh2" - tdh2/go/tdh2 - click tdh2/go/tdh2 href "https://github.com/smartcontractkit/tdh2" wsrpc click wsrpc href "https://github.com/smartcontractkit/wsrpc" @@ -248,32 +142,17 @@ flowchart LR capabilities/cron capabilities/http_action capabilities/http_trigger - capabilities/integration_tests capabilities/libs end click capabilities-repo href "https://github.com/smartcontractkit/capabilities" - subgraph chainlink-aptos-repo[chainlink-aptos] - chainlink-aptos - chainlink-aptos/codec - end - click chainlink-aptos-repo href "https://github.com/smartcontractkit/chainlink-aptos" - subgraph chainlink-ccip-repo[chainlink-ccip] chainlink-ccip - chainlink-ccip/chains/evm chainlink-ccip/chains/solana chainlink-ccip/chains/solana/gobindings - chainlink-ccip/deployment end click chainlink-ccip-repo href "https://github.com/smartcontractkit/chainlink-ccip" - subgraph chainlink-ccv-repo[chainlink-ccv] - chainlink-ccv - chainlink-ccv/deployment - end - click chainlink-ccv-repo href "https://github.com/smartcontractkit/chainlink-ccv" - subgraph chainlink-common-repo[chainlink-common] chainlink-common chainlink-common/keystore @@ -284,7 +163,6 @@ flowchart LR subgraph chainlink-evm-repo[chainlink-evm] chainlink-evm - chainlink-evm/contracts/cre/gobindings chainlink-evm/gethwrappers chainlink-evm/gethwrappers/helpers end @@ -300,20 +178,10 @@ flowchart LR subgraph chainlink-protos-repo[chainlink-protos] chainlink-protos/billing/go - chainlink-protos/chainlink-ccv/committee-verifier - chainlink-protos/chainlink-ccv/heartbeat - chainlink-protos/chainlink-ccv/message-discovery - chainlink-protos/chainlink-ccv/message-rules - chainlink-protos/chainlink-ccv/verifier chainlink-protos/cre/go - chainlink-protos/data-feeds - chainlink-protos/job-distributor chainlink-protos/linking-service/go chainlink-protos/metering/go chainlink-protos/node-platform - chainlink-protos/op-catalog - chainlink-protos/orchestrator - chainlink-protos/ring/go chainlink-protos/rmn/v1.6/go chainlink-protos/storage-service chainlink-protos/svr @@ -327,38 +195,6 @@ flowchart LR end click chainlink-solana-repo href "https://github.com/smartcontractkit/chainlink-solana" - subgraph chainlink-sui-repo[chainlink-sui] - chainlink-sui - chainlink-sui/codec - end - click chainlink-sui-repo href "https://github.com/smartcontractkit/chainlink-sui" - - subgraph chainlink-testing-framework-repo[chainlink-testing-framework] - chainlink-testing-framework/framework - chainlink-testing-framework/seth - end - click chainlink-testing-framework-repo href "https://github.com/smartcontractkit/chainlink-testing-framework" - - subgraph chainlink-ton-repo[chainlink-ton] - chainlink-ton - chainlink-ton/cciplib - end - click chainlink-ton-repo href "https://github.com/smartcontractkit/chainlink-ton" - - subgraph cre-sdk-go-repo[cre-sdk-go] - cre-sdk-go - cre-sdk-go/capabilities/blockchain/evm - cre-sdk-go/capabilities/networking/http - cre-sdk-go/capabilities/scheduler/cron - end - click cre-sdk-go-repo href "https://github.com/smartcontractkit/cre-sdk-go" - - subgraph tdh2-repo[tdh2] - tdh2/go/ocr2/decryptionplugin - tdh2/go/tdh2 - end - click tdh2-repo href "https://github.com/smartcontractkit/tdh2" - classDef outline stroke-dasharray:6,fill:none; - class capabilities-repo,chainlink-aptos-repo,chainlink-ccip-repo,chainlink-ccv-repo,chainlink-common-repo,chainlink-evm-repo,chainlink-framework-repo,chainlink-protos-repo,chainlink-solana-repo,chainlink-sui-repo,chainlink-testing-framework-repo,chainlink-ton-repo,cre-sdk-go-repo,tdh2-repo outline + class capabilities-repo,chainlink-ccip-repo,chainlink-common-repo,chainlink-evm-repo,chainlink-framework-repo,chainlink-protos-repo,chainlink-solana-repo outline ``` diff --git a/integration_tests/README.md b/integration_tests/README.md deleted file mode 100644 index ef958e866..000000000 --- a/integration_tests/README.md +++ /dev/null @@ -1,22 +0,0 @@ -Contains integration tests to exercise and test capabilities in this repo. - -### Usage -1. Run a postgres instance as described in [Chainlink repo](https://github.com/smartcontractkit/chainlink) and then setup the - database by running `go run github.com/smartcontractkit/chainlink/v2 local db preparetest` from the integration_tests directory. - -2. Set the database path in your environment or the environment of the test runner -``` -export CL_DATABASE_URL=postgresql://chainlink_dev:insecurepassword@localhost:5432/chainlink_development_test?sslmode=disable -``` -3. Run specific tests from root as shown below or directly from an IDE as you would any other unit test -``` -./nx run integration_tests:test -run ^Test_CronTrigger$ -v -``` - -If a test killed part way through it's possible that it zombie standard capabilities are still running. To kill these run the following command: -``` -./scripts/killZombieProcesses.sh -``` - -### Test setup -![Diagram to illustrate the communication mechanisms and processes involved in running the integration tests](./integrationtestsdiagram.png) \ No newline at end of file diff --git a/integration_tests/consensus/consensus_test.go b/integration_tests/consensus/consensus_test.go deleted file mode 100644 index 60936090b..000000000 --- a/integration_tests/consensus/consensus_test.go +++ /dev/null @@ -1,195 +0,0 @@ -package consensus - -import ( - "context" - "encoding/json" - "fmt" - "path/filepath" - "regexp" - "strings" - "testing" - "time" - - "github.com/stretchr/testify/require" - "google.golang.org/protobuf/proto" - - "github.com/smartcontractkit/chainlink-common/pkg/beholder/beholdertest" - commoncap "github.com/smartcontractkit/chainlink-common/pkg/capabilities" - "github.com/smartcontractkit/chainlink-common/pkg/services/servicetest" - "github.com/smartcontractkit/chainlink-common/pkg/workflows" - events2 "github.com/smartcontractkit/chainlink-protos/workflows/go/events" - "github.com/smartcontractkit/chainlink/v2/core/capabilities/integration_tests/framework" - "github.com/smartcontractkit/chainlink/v2/core/logger" - "github.com/smartcontractkit/chainlink/v2/core/services/gateway/handlers/capabilities" - - "github.com/smartcontractkit/capabilities/integration_tests/utils" -) - -func Test_Consensus(t *testing.T) { - t.Skip("PRODCRE-834 Needs to be fixed") - ctx := t.Context() - beholderTester := beholdertest.NewObserver(t) - - lggr := logger.TestLogger(t) - defer func() { - utils.CleanupCapabilitiesDir(lggr) - }() - - readBalancesWithConfigPath, err := filepath.Abs("./workflow") - require.NoError(t, err) - - wasmFile := filepath.Join(readBalancesWithConfigPath, "consensus.wasm") - mainFile := filepath.Join(readBalancesWithConfigPath, "main_wasip1.go") - utils.CreateWasmBinary(t, mainFile, wasmFile) - - targetSink := framework.NewTargetSink("mock-target", "1.0.0") - - numOfWorkflowNodes := 4 - workflowName := "a1b2c3d4e5f6a1b2c3d4" - - setupDon(ctx, t, lggr, wasmFile, targetSink, numOfWorkflowNodes, workflowName) - - triggerTimeIdenticalConsensusValue := map[string][]string{} - require.Eventually(t, func() bool { - workflowLogs := getBeholderLogsForWorkflow(beholderTester, t, workflowName) - - // Wait until we have the logs for all workflows - if len(workflowLogs) < numOfWorkflowNodes { - return false - } - - for _, logs := range workflowLogs { - // Expect only one log line - require.Len(t, logs, 1, "Expected exactly one log line per workflow") - - log := logs[0] - - if strings.Contains(log.Message, "V2 Workflow Execution Result") { - re := regexp.MustCompile(`trigger time seconds:(\d+)`) - matches := re.FindStringSubmatch(log.Message) - triggerTime := matches[1] - re = regexp.MustCompile(`consensus value (\d+)`) - matches = re.FindStringSubmatch(log.Message) - consensusValue := matches[1] - triggerTimeIdenticalConsensusValue[triggerTime] = append(triggerTimeIdenticalConsensusValue[triggerTime], consensusValue) - } - } - - // Check if we have expected number of identical consensus values for each trigger time - for _, consensusValues := range triggerTimeIdenticalConsensusValue { - if len(consensusValues) == numOfWorkflowNodes { - if len(consensusValues) == numOfWorkflowNodes && allEqual(consensusValues) { - return true - } - } - } - - return false - }, 90*time.Second, 100*time.Millisecond) -} - -func allEqual(values []string) bool { - for i := 1; i < len(values); i++ { - if values[i] != values[0] { - return false - } - } - return true -} - -func setupDon(ctx context.Context, t *testing.T, lggr logger.Logger, workflowURL string, targetSink framework.TargetFactory, - numOfWorkflowNodes int, workflowName string) { - configURL := "workflow-config.json" - compressedBinary, base64EncodedCompressedBinary := utils.GetCompressedWorkflowWasm(t, workflowURL) - - syncerFetcherFunc := func(ctx context.Context, messageID string, req capabilities.Request) ([]byte, error) { - url := req.URL - switch url { - case workflowURL: - return []byte(base64EncodedCompressedBinary), nil - case configURL: - return []byte(""), nil - } - - return nil, fmt.Errorf("unknown url: %s", url) - } - - donContext := framework.CreateDonContextWithWorkflowRegistry(ctx, t, syncerFetcherFunc, utils.NoopComputeFetcherFactory{}) - - cronBinary, err := utils.DeployCapability(t, "cron") - require.NoError(t, err) - consensusBinary, err := utils.DeployCapability(t, "consensus") - - require.NoError(t, err) - - // Setup workflow DON - workflowDonConfiguration, err := framework.NewDonConfiguration(framework.NewDonConfigurationParams{Name: "ConsensusWorkflow", NumNodes: numOfWorkflowNodes, F: 1, AcceptsWorkflows: true}) - require.NoError(t, err) - - workflowDon := framework.NewDON(ctx, t, lggr, workflowDonConfiguration, - []commoncap.DON{}, - donContext, true, 1*time.Second) - - workflowDon.AddStandardCapability("cron-capabilities", cronBinary, utils.GetCronConfig(t, 1)) - workflowDon.AddStandardCapability("consensus-capabilities", consensusBinary, GetConsensusConfig(t, 10000)) - - workflowDon.AddOCR3NonStandardCapability() - workflowDon.AddTargetCapability(targetSink) - - workflowDon.Initialise() - - servicetest.Run(t, workflowDon) - - donContext.WaitForCapabilitiesToBeExposed(t, workflowDon) - - registerWorkflow(t, donContext, workflowName, compressedBinary, "", workflowDon, - workflowURL, configURL, []byte{}) -} - -func registerWorkflow(t *testing.T, donContext framework.DonContext, workflowName string, compressedBinary []byte, - secretsURL string, workflowDon *framework.DON, binaryURL string, configURL string, configBytes []byte) { - workflowID, err := workflows.GenerateWorkflowID(donContext.EthBlockchain.TransactionOpts().From[:], workflowName, compressedBinary, configBytes, secretsURL) - require.NoError(t, err) - - err = workflowDon.AddWorkflow(framework.Workflow{ - Name: workflowName, - ID: workflowID, - Status: 0, - BinaryURL: binaryURL, - ConfigURL: configURL, - SecretsURL: secretsURL, - }) - require.NoError(t, err) -} - -func getBeholderLogsForWorkflow(beholderTester beholdertest.Observer, t *testing.T, workflowName string) [][]*events2.LogLine { - var workflowLogs [][]*events2.LogLine - - userMsgs := beholderTester.Messages(t, "beholder_data_schema", "/cre-events-user-logs/v1") - if len(userMsgs) > 0 { - for _, userMsg := range userMsgs { - userLog := events2.UserLogs{} - err := proto.Unmarshal(userMsg.Body, &userLog) - require.NoError(t, err) - workflowLogs = append(workflowLogs, userLog.LogLines) - } - } - - return workflowLogs -} - -type ConsensusConfig struct { - MaximumRequestSizeBytes int `json:"maximumRequestSizeBytes"` -} - -func GetConsensusConfig(t *testing.T, maximumRequestSizeBytes int) string { - config := ConsensusConfig{ - MaximumRequestSizeBytes: maximumRequestSizeBytes, - } - - jsonConfig, err := json.Marshal(config) - if err != nil { - t.Fatalf("failed to marshal config: %v", err) - } - return "'" + string(jsonConfig) + "'" -} diff --git a/integration_tests/consensus/workflow/main_wasip1.go b/integration_tests/consensus/workflow/main_wasip1.go deleted file mode 100644 index 1b6af037b..000000000 --- a/integration_tests/consensus/workflow/main_wasip1.go +++ /dev/null @@ -1,58 +0,0 @@ -package main - -import ( - "fmt" - "log/slog" - - "github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron" - "github.com/smartcontractkit/cre-sdk-go/cre" - "github.com/smartcontractkit/cre-sdk-go/cre/wasm" -) - -func RunSimpleCronWorkflow( - _ struct{}, - _ *slog.Logger, - _ cre.SecretsProvider, -) (cre.Workflow[struct{}], error) { - cfg := &cron.Config{ - Schedule: "*/2 * * * * *", // every 2 seconds - } - - return cre.Workflow[struct{}]{ - cre.Handler( - cron.Trigger(cfg), - onTrigger, - ), - }, nil -} - -func onTrigger(config struct{}, runtime cre.Runtime, outputs *cron.Payload) (string, error) { - var randomValue int64 - - consensusValue, err := cre.RunInNodeMode(config, runtime, - func(_ struct{}, nrt cre.NodeRuntime) (int64, error) { - nr, err := nrt.Rand() - if err != nil { - return 0, err - } - randomValue = nr.Int63n(10) - return randomValue, nil - }, - cre.ConsensusMedianAggregation[int64](), - ).Await() - - if err != nil { - runtime.Logger().Error(fmt.Sprintf("Error in RunInNodeMode: %v", err)) - } else { - runtime.Logger().Info(fmt.Sprintf( - "V2 Workflow Execution Result: trigger time %s local value %d, consensus value %d", - outputs.ScheduledExecutionTime, randomValue, consensusValue, - )) - } - - return "complete", nil -} - -func main() { - wasm.NewRunner(func(_ []byte) (struct{}, error) { return struct{}{}, nil }).Run(RunSimpleCronWorkflow) -} diff --git a/integration_tests/cron/cron_test.go b/integration_tests/cron/cron_test.go deleted file mode 100644 index d50d3eede..000000000 --- a/integration_tests/cron/cron_test.go +++ /dev/null @@ -1,96 +0,0 @@ -package crontest - -import ( - "context" - "testing" - "time" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/smartcontractkit/chainlink/v2/core/capabilities/integration_tests/framework" - "github.com/smartcontractkit/chainlink/v2/core/logger" - - "github.com/smartcontractkit/capabilities/integration_tests/utils" -) - -const ( - scheduleEverySecond = "* * * * * *" -) - -type Payload struct { - // Time that cron trigger's task execution had been scheduled to occur - // (RFC3339Nano formatted) - ScheduledExecutionTime string `json:"ScheduledExecutionTime" yaml:"ScheduledExecutionTime" mapstructure:"ScheduledExecutionTime"` -} - -func Test_CronTrigger(t *testing.T) { - t.Skip("skipping broken test") - ctx := t.Context() - lggr := logger.TestLogger(t) - defer func() { - utils.CleanupCapabilitiesDir(lggr) - }() - - cronBinary, err := utils.DeployCapability(t, "cron") - require.NoError(t, err) - - workflowDonConfiguration, err := framework.NewDonConfiguration(framework.NewDonConfigurationParams{Name: "Workflow", NumNodes: 7, F: 2, AcceptsWorkflows: true}) - require.NoError(t, err) - - targetSink := framework.NewTargetSink("mock-target", "1.0.0") - - setupCronTestDon(ctx, t, lggr, workflowDonConfiguration, scheduleEverySecond, targetSink, cronBinary, 1) - - quorum := 3 // number of nodes that need to execute the workflow (F+1) - runs := 3 // number of rounds to be considered done - waitTime := 60 * time.Second - - waitFor(ctx, t, targetSink, quorum, runs, waitTime) -} - -func waitFor(ctx context.Context, t *testing.T, targetSink *framework.TargetSink, quorum int, expectedNumRuns int, waitTime time.Duration) { - ctxWithTimeout, cancel := context.WithTimeout(ctx, waitTime) - defer cancel() - - hasQuorum := 0 - countCalls := 0 - idsToActualTime := map[string][]time.Time{} - - for { - select { - case <-ctxWithTimeout.Done(): - t.Fatalf("timed out waiting for runs, expected %d, received %d", expectedNumRuns, hasQuorum) - case request := <-targetSink.Sink: - assert.NotNil(t, request.Inputs) - - const field = "data" - data := request.Inputs.Underlying[field] - var payload Payload - err := data.UnwrapTo(&payload) - assert.NoError(t, err) - - countCalls++ - - actualTime := time.Now() - idsToActualTime[request.Metadata.WorkflowExecutionID] = append(idsToActualTime[request.Metadata.WorkflowExecutionID], actualTime) - - // Check that the actual execution time of trigger is within a second across nodes - if len(idsToActualTime[request.Metadata.WorkflowExecutionID]) > 1 { - for i, executionTime := range idsToActualTime[request.Metadata.WorkflowExecutionID] { - if i > 0 { - assert.True(t, executionTime.Before(idsToActualTime[request.Metadata.WorkflowExecutionID][0].Add(time.Second))) - } - } - } - - if len(idsToActualTime[request.Metadata.WorkflowExecutionID]) == quorum { - hasQuorum++ - } - - if hasQuorum == expectedNumRuns { - return - } - } - } -} diff --git a/integration_tests/cron/setup.go b/integration_tests/cron/setup.go deleted file mode 100644 index 622dcb21f..000000000 --- a/integration_tests/cron/setup.go +++ /dev/null @@ -1,53 +0,0 @@ -package crontest - -import ( - "context" - "testing" - "time" - - "github.com/stretchr/testify/require" - - commoncap "github.com/smartcontractkit/chainlink-common/pkg/capabilities" - "github.com/smartcontractkit/chainlink-common/pkg/services/servicetest" - "github.com/smartcontractkit/chainlink/v2/core/capabilities/integration_tests/framework" - "github.com/smartcontractkit/chainlink/v2/core/logger" - - "github.com/smartcontractkit/capabilities/integration_tests/utils" -) - -func setupCronTestDon(ctx context.Context, t *testing.T, lggr logger.Logger, - workflowDonInfo framework.DonConfiguration, - cronSchedule string, targetSink framework.TargetFactory, cronPath string, - fastestIntervalSeconds int) (workflowDon *framework.DON) { - donContext := framework.CreateDonContext(ctx, t) - - workflowDon = createCronTestWorkflowDon(ctx, t, lggr, workflowDonInfo, donContext, targetSink) - - workflowDon.AddStandardCapability("cron-capabilities", cronPath, utils.GetCronConfig(t, fastestIntervalSeconds)) - - workflowDon.Initialise() - - servicetest.Run(t, workflowDon) - - donContext.WaitForCapabilitiesToBeExposed(t, workflowDon) - - workflowJob := GetWorkflowJobCron(t, workflowName, workflowOwnerID, cronSchedule) - - err := workflowDon.AddJob(ctx, &workflowJob) - require.NoError(t, err) - - return workflowDon -} - -func createCronTestWorkflowDon(ctx context.Context, t *testing.T, lggr logger.Logger, - workflowDonInfo framework.DonConfiguration, - donContext framework.DonContext, - targetFactory framework.TargetFactory) *framework.DON { - workflowDon := framework.NewDON(ctx, t, lggr, workflowDonInfo, - []commoncap.DON{}, - donContext, true, 1*time.Second) - - workflowDon.AddTargetCapability(targetFactory) - workflowDon.AddOCR3NonStandardCapability() - return workflowDon -} diff --git a/integration_tests/cron/workflow.go b/integration_tests/cron/workflow.go deleted file mode 100644 index 9358587f7..000000000 --- a/integration_tests/cron/workflow.go +++ /dev/null @@ -1,52 +0,0 @@ -package crontest - -import ( - "fmt" - "testing" - - "github.com/smartcontractkit/chainlink/v2/core/services/job" - "github.com/smartcontractkit/chainlink/v2/core/testdata/testspecs" -) - -var ( - workflowName = "abcdef0123" - workflowOwnerID = "0100000000000000000000000000000000000001" -) - -const workflowTemplateCron = ` -name: "%s" -owner: "0x%s" -triggers: - - id: "cron-trigger@1.0.0" - ref: "trigger" - config: - schedule: - \"%s\" - -targets: - - id: "mock-target@1.0.0" - ref: "target" - inputs: - data: $(trigger.outputs) - config: - mustputavaluehere_thisisabug: "true" -` - -func GetWorkflowJobCron( - t *testing.T, - workflowName string, - workflowOwner string, - cronSchedule string, -) job.Job { - workflowJobSpec := testspecs.GenerateWorkflowJobSpec( - t, - fmt.Sprintf( - workflowTemplateCron, - workflowName, - workflowOwner, - cronSchedule, - ), - ) - - return workflowJobSpec.Job() -} diff --git a/integration_tests/evm/contract/MessageEmitter.abi b/integration_tests/evm/contract/MessageEmitter.abi deleted file mode 100644 index 8cc4ff61d..000000000 --- a/integration_tests/evm/contract/MessageEmitter.abi +++ /dev/null @@ -1 +0,0 @@ -[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"MessageEmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"topic2","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"topic3","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"topic4","type":"uint256"},{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"MultiTopicEmitted","type":"event"},{"inputs":[{"internalType":"string","name":"message","type":"string"}],"name":"emitMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"topic2","type":"uint256"},{"internalType":"uint256","name":"topic3","type":"uint256"},{"internalType":"uint256","name":"topic4","type":"uint256"},{"internalType":"string","name":"message","type":"string"}],"name":"emitMultiTopic","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/integration_tests/evm/contract/MessageEmitter.bin b/integration_tests/evm/contract/MessageEmitter.bin deleted file mode 100644 index 2960fdf61..000000000 --- a/integration_tests/evm/contract/MessageEmitter.bin +++ /dev/null @@ -1 +0,0 @@ -6080604052348015600e575f5ffd5b5061030d8061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c80632ac0df2614610038578063c6aea90514610054575b5f5ffd5b610052600480360381019061004d9190610159565b610070565b005b61006e600480360381019061006991906101d7565b6100ad565b005b7f50ede1f15a65bab9edf83cef0d1ffb1f21234653b3e58170594c3d8685d30e7a82826040516100a19291906102b5565b60405180910390a15050565b8284867f815c4a45ed35542680545d6ab891cc82bbae48ed01cab76b527f3daf19b9f0ba85856040516100e19291906102b5565b60405180910390a45050505050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112610119576101186100f8565b5b8235905067ffffffffffffffff811115610136576101356100fc565b5b60208301915083600182028301111561015257610151610100565b5b9250929050565b5f5f6020838503121561016f5761016e6100f0565b5b5f83013567ffffffffffffffff81111561018c5761018b6100f4565b5b61019885828601610104565b92509250509250929050565b5f819050919050565b6101b6816101a4565b81146101c0575f5ffd5b50565b5f813590506101d1816101ad565b92915050565b5f5f5f5f5f608086880312156101f0576101ef6100f0565b5b5f6101fd888289016101c3565b955050602061020e888289016101c3565b945050604061021f888289016101c3565b935050606086013567ffffffffffffffff8111156102405761023f6100f4565b5b61024c88828901610104565b92509250509295509295909350565b5f82825260208201905092915050565b828183375f83830152505050565b5f601f19601f8301169050919050565b5f610294838561025b565b93506102a183858461026b565b6102aa83610279565b840190509392505050565b5f6020820190508181035f8301526102ce818486610289565b9050939250505056fea2646970667358221220431798067102dc183e232a1929a7b81111860b1d542da3f9947f4b2185496fd264736f6c634300081e0033 \ No newline at end of file diff --git a/integration_tests/evm/contract/MessageEmitter.go b/integration_tests/evm/contract/MessageEmitter.go deleted file mode 100644 index f9b9b9db7..000000000 --- a/integration_tests/evm/contract/MessageEmitter.go +++ /dev/null @@ -1,542 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package contract - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "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" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription - _ = abi.ConvertType -) - -// ContractMetaData contains all meta data concerning the Contract contract. -var ContractMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"MessageEmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"topic2\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"topic3\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"topic4\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"MultiTopicEmitted\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"emitMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"topic2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"topic3\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"topic4\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"emitMultiTopic\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6080604052348015600e575f5ffd5b5061030d8061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c80632ac0df2614610038578063c6aea90514610054575b5f5ffd5b610052600480360381019061004d9190610159565b610070565b005b61006e600480360381019061006991906101d7565b6100ad565b005b7f50ede1f15a65bab9edf83cef0d1ffb1f21234653b3e58170594c3d8685d30e7a82826040516100a19291906102b5565b60405180910390a15050565b8284867f815c4a45ed35542680545d6ab891cc82bbae48ed01cab76b527f3daf19b9f0ba85856040516100e19291906102b5565b60405180910390a45050505050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112610119576101186100f8565b5b8235905067ffffffffffffffff811115610136576101356100fc565b5b60208301915083600182028301111561015257610151610100565b5b9250929050565b5f5f6020838503121561016f5761016e6100f0565b5b5f83013567ffffffffffffffff81111561018c5761018b6100f4565b5b61019885828601610104565b92509250509250929050565b5f819050919050565b6101b6816101a4565b81146101c0575f5ffd5b50565b5f813590506101d1816101ad565b92915050565b5f5f5f5f5f608086880312156101f0576101ef6100f0565b5b5f6101fd888289016101c3565b955050602061020e888289016101c3565b945050604061021f888289016101c3565b935050606086013567ffffffffffffffff8111156102405761023f6100f4565b5b61024c88828901610104565b92509250509295509295909350565b5f82825260208201905092915050565b828183375f83830152505050565b5f601f19601f8301169050919050565b5f610294838561025b565b93506102a183858461026b565b6102aa83610279565b840190509392505050565b5f6020820190508181035f8301526102ce818486610289565b9050939250505056fea2646970667358221220431798067102dc183e232a1929a7b81111860b1d542da3f9947f4b2185496fd264736f6c634300081e0033", -} - -// ContractABI is the input ABI used to generate the binding from. -// Deprecated: Use ContractMetaData.ABI instead. -var ContractABI = ContractMetaData.ABI - -// ContractBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use ContractMetaData.Bin instead. -var ContractBin = ContractMetaData.Bin - -// DeployContract deploys a new Ethereum contract, binding an instance of Contract to it. -func DeployContract(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Contract, error) { - parsed, err := ContractMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &Contract{ContractCaller: ContractCaller{contract: contract}, ContractTransactor: ContractTransactor{contract: contract}, ContractFilterer: ContractFilterer{contract: contract}}, nil -} - -// Contract is an auto generated Go binding around an Ethereum contract. -type Contract struct { - ContractCaller // Read-only binding to the contract - ContractTransactor // Write-only binding to the contract - ContractFilterer // Log filterer for contract events -} - -// ContractCaller is an auto generated read-only Go binding around an Ethereum contract. -type ContractCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ContractTransactor is an auto generated write-only Go binding around an Ethereum contract. -type ContractTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ContractFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type ContractFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ContractSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type ContractSession struct { - Contract *Contract // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ContractCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type ContractCallerSession struct { - Contract *ContractCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// ContractTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type ContractTransactorSession struct { - Contract *ContractTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ContractRaw is an auto generated low-level Go binding around an Ethereum contract. -type ContractRaw struct { - Contract *Contract // Generic contract binding to access the raw methods on -} - -// ContractCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type ContractCallerRaw struct { - Contract *ContractCaller // Generic read-only contract binding to access the raw methods on -} - -// ContractTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type ContractTransactorRaw struct { - Contract *ContractTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewContract creates a new instance of Contract, bound to a specific deployed contract. -func NewContract(address common.Address, backend bind.ContractBackend) (*Contract, error) { - contract, err := bindContract(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &Contract{ContractCaller: ContractCaller{contract: contract}, ContractTransactor: ContractTransactor{contract: contract}, ContractFilterer: ContractFilterer{contract: contract}}, nil -} - -// NewContractCaller creates a new read-only instance of Contract, bound to a specific deployed contract. -func NewContractCaller(address common.Address, caller bind.ContractCaller) (*ContractCaller, error) { - contract, err := bindContract(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &ContractCaller{contract: contract}, nil -} - -// NewContractTransactor creates a new write-only instance of Contract, bound to a specific deployed contract. -func NewContractTransactor(address common.Address, transactor bind.ContractTransactor) (*ContractTransactor, error) { - contract, err := bindContract(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &ContractTransactor{contract: contract}, nil -} - -// NewContractFilterer creates a new log filterer instance of Contract, bound to a specific deployed contract. -func NewContractFilterer(address common.Address, filterer bind.ContractFilterer) (*ContractFilterer, error) { - contract, err := bindContract(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &ContractFilterer{contract: contract}, nil -} - -// bindContract binds a generic wrapper to an already deployed contract. -func bindContract(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := ContractMetaData.GetAbi() - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_Contract *ContractRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Contract.Contract.ContractCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_Contract *ContractRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Contract.Contract.ContractTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Contract *ContractRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Contract.Contract.ContractTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_Contract *ContractCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Contract.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_Contract *ContractTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Contract.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Contract *ContractTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Contract.Contract.contract.Transact(opts, method, params...) -} - -// EmitMessage is a paid mutator transaction binding the contract method 0x2ac0df26. -// -// Solidity: function emitMessage(string message) returns() -func (_Contract *ContractTransactor) EmitMessage(opts *bind.TransactOpts, message string) (*types.Transaction, error) { - return _Contract.contract.Transact(opts, "emitMessage", message) -} - -// EmitMessage is a paid mutator transaction binding the contract method 0x2ac0df26. -// -// Solidity: function emitMessage(string message) returns() -func (_Contract *ContractSession) EmitMessage(message string) (*types.Transaction, error) { - return _Contract.Contract.EmitMessage(&_Contract.TransactOpts, message) -} - -// EmitMessage is a paid mutator transaction binding the contract method 0x2ac0df26. -// -// Solidity: function emitMessage(string message) returns() -func (_Contract *ContractTransactorSession) EmitMessage(message string) (*types.Transaction, error) { - return _Contract.Contract.EmitMessage(&_Contract.TransactOpts, message) -} - -// EmitMultiTopic is a paid mutator transaction binding the contract method 0xc6aea905. -// -// Solidity: function emitMultiTopic(uint256 topic2, uint256 topic3, uint256 topic4, string message) returns() -func (_Contract *ContractTransactor) EmitMultiTopic(opts *bind.TransactOpts, topic2 *big.Int, topic3 *big.Int, topic4 *big.Int, message string) (*types.Transaction, error) { - return _Contract.contract.Transact(opts, "emitMultiTopic", topic2, topic3, topic4, message) -} - -// EmitMultiTopic is a paid mutator transaction binding the contract method 0xc6aea905. -// -// Solidity: function emitMultiTopic(uint256 topic2, uint256 topic3, uint256 topic4, string message) returns() -func (_Contract *ContractSession) EmitMultiTopic(topic2 *big.Int, topic3 *big.Int, topic4 *big.Int, message string) (*types.Transaction, error) { - return _Contract.Contract.EmitMultiTopic(&_Contract.TransactOpts, topic2, topic3, topic4, message) -} - -// EmitMultiTopic is a paid mutator transaction binding the contract method 0xc6aea905. -// -// Solidity: function emitMultiTopic(uint256 topic2, uint256 topic3, uint256 topic4, string message) returns() -func (_Contract *ContractTransactorSession) EmitMultiTopic(topic2 *big.Int, topic3 *big.Int, topic4 *big.Int, message string) (*types.Transaction, error) { - return _Contract.Contract.EmitMultiTopic(&_Contract.TransactOpts, topic2, topic3, topic4, message) -} - -// ContractMessageEmittedIterator is returned from FilterMessageEmitted and is used to iterate over the raw logs and unpacked data for MessageEmitted events raised by the Contract contract. -type ContractMessageEmittedIterator struct { - Event *ContractMessageEmitted // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractMessageEmittedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractMessageEmitted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractMessageEmitted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractMessageEmittedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractMessageEmittedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractMessageEmitted represents a MessageEmitted event raised by the Contract contract. -type ContractMessageEmitted struct { - Message string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterMessageEmitted is a free log retrieval operation binding the contract event 0x50ede1f15a65bab9edf83cef0d1ffb1f21234653b3e58170594c3d8685d30e7a. -// -// Solidity: event MessageEmitted(string message) -func (_Contract *ContractFilterer) FilterMessageEmitted(opts *bind.FilterOpts) (*ContractMessageEmittedIterator, error) { - - logs, sub, err := _Contract.contract.FilterLogs(opts, "MessageEmitted") - if err != nil { - return nil, err - } - return &ContractMessageEmittedIterator{contract: _Contract.contract, event: "MessageEmitted", logs: logs, sub: sub}, nil -} - -// WatchMessageEmitted is a free log subscription operation binding the contract event 0x50ede1f15a65bab9edf83cef0d1ffb1f21234653b3e58170594c3d8685d30e7a. -// -// Solidity: event MessageEmitted(string message) -func (_Contract *ContractFilterer) WatchMessageEmitted(opts *bind.WatchOpts, sink chan<- *ContractMessageEmitted) (event.Subscription, error) { - - logs, sub, err := _Contract.contract.WatchLogs(opts, "MessageEmitted") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractMessageEmitted) - if err := _Contract.contract.UnpackLog(event, "MessageEmitted", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseMessageEmitted is a log parse operation binding the contract event 0x50ede1f15a65bab9edf83cef0d1ffb1f21234653b3e58170594c3d8685d30e7a. -// -// Solidity: event MessageEmitted(string message) -func (_Contract *ContractFilterer) ParseMessageEmitted(log types.Log) (*ContractMessageEmitted, error) { - event := new(ContractMessageEmitted) - if err := _Contract.contract.UnpackLog(event, "MessageEmitted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractMultiTopicEmittedIterator is returned from FilterMultiTopicEmitted and is used to iterate over the raw logs and unpacked data for MultiTopicEmitted events raised by the Contract contract. -type ContractMultiTopicEmittedIterator struct { - Event *ContractMultiTopicEmitted // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractMultiTopicEmittedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractMultiTopicEmitted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractMultiTopicEmitted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractMultiTopicEmittedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractMultiTopicEmittedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractMultiTopicEmitted represents a MultiTopicEmitted event raised by the Contract contract. -type ContractMultiTopicEmitted struct { - Topic2 *big.Int - Topic3 *big.Int - Topic4 *big.Int - Message string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterMultiTopicEmitted is a free log retrieval operation binding the contract event 0x815c4a45ed35542680545d6ab891cc82bbae48ed01cab76b527f3daf19b9f0ba. -// -// Solidity: event MultiTopicEmitted(uint256 indexed topic2, uint256 indexed topic3, uint256 indexed topic4, string message) -func (_Contract *ContractFilterer) FilterMultiTopicEmitted(opts *bind.FilterOpts, topic2 []*big.Int, topic3 []*big.Int, topic4 []*big.Int) (*ContractMultiTopicEmittedIterator, error) { - - var topic2Rule []interface{} - for _, topic2Item := range topic2 { - topic2Rule = append(topic2Rule, topic2Item) - } - var topic3Rule []interface{} - for _, topic3Item := range topic3 { - topic3Rule = append(topic3Rule, topic3Item) - } - var topic4Rule []interface{} - for _, topic4Item := range topic4 { - topic4Rule = append(topic4Rule, topic4Item) - } - - logs, sub, err := _Contract.contract.FilterLogs(opts, "MultiTopicEmitted", topic2Rule, topic3Rule, topic4Rule) - if err != nil { - return nil, err - } - return &ContractMultiTopicEmittedIterator{contract: _Contract.contract, event: "MultiTopicEmitted", logs: logs, sub: sub}, nil -} - -// WatchMultiTopicEmitted is a free log subscription operation binding the contract event 0x815c4a45ed35542680545d6ab891cc82bbae48ed01cab76b527f3daf19b9f0ba. -// -// Solidity: event MultiTopicEmitted(uint256 indexed topic2, uint256 indexed topic3, uint256 indexed topic4, string message) -func (_Contract *ContractFilterer) WatchMultiTopicEmitted(opts *bind.WatchOpts, sink chan<- *ContractMultiTopicEmitted, topic2 []*big.Int, topic3 []*big.Int, topic4 []*big.Int) (event.Subscription, error) { - - var topic2Rule []interface{} - for _, topic2Item := range topic2 { - topic2Rule = append(topic2Rule, topic2Item) - } - var topic3Rule []interface{} - for _, topic3Item := range topic3 { - topic3Rule = append(topic3Rule, topic3Item) - } - var topic4Rule []interface{} - for _, topic4Item := range topic4 { - topic4Rule = append(topic4Rule, topic4Item) - } - - logs, sub, err := _Contract.contract.WatchLogs(opts, "MultiTopicEmitted", topic2Rule, topic3Rule, topic4Rule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractMultiTopicEmitted) - if err := _Contract.contract.UnpackLog(event, "MultiTopicEmitted", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseMultiTopicEmitted is a log parse operation binding the contract event 0x815c4a45ed35542680545d6ab891cc82bbae48ed01cab76b527f3daf19b9f0ba. -// -// Solidity: event MultiTopicEmitted(uint256 indexed topic2, uint256 indexed topic3, uint256 indexed topic4, string message) -func (_Contract *ContractFilterer) ParseMultiTopicEmitted(log types.Log) (*ContractMultiTopicEmitted, error) { - event := new(ContractMultiTopicEmitted) - if err := _Contract.contract.UnpackLog(event, "MultiTopicEmitted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/integration_tests/evm/contract/MessageEmitter.sol b/integration_tests/evm/contract/MessageEmitter.sol deleted file mode 100644 index 36f94c414..000000000 --- a/integration_tests/evm/contract/MessageEmitter.sol +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.0; - -contract MessageEmitter { - event MessageEmitted(string message); - - // New event with multiple indexed parameters for multi-topic log trigger tests - event MultiTopicEmitted( - uint256 indexed topic2, - uint256 indexed topic3, - uint256 indexed topic4, - string message - ); - - function emitMessage(string calldata message) external { - emit MessageEmitted(message); - } - - // Emits the MultiTopicEmitted event so tests can exercise topic2-4 filtering - function emitMultiTopic( - uint256 topic2, - uint256 topic3, - uint256 topic4, - string calldata message - ) external { - emit MultiTopicEmitted( topic2, topic3, topic4, message); - } -} diff --git a/integration_tests/evm/contract/readme.md b/integration_tests/evm/contract/readme.md deleted file mode 100644 index 021bf263a..000000000 --- a/integration_tests/evm/contract/readme.md +++ /dev/null @@ -1,16 +0,0 @@ -## How to build the contract and generate Go bindings - -From the `integration_tests/evm/` directory, run the following commands: - -### 1 Compile the contract -The first command uses solc (the Solidity compiler) to generate the ABI and binary files for the MessageEmitter.sol contract and outputs them to the integration_tests/evm/contract/ directory. -```bash -solc --abi --bin --overwrite -o ./contract/ ./contract/MessageEmitter.sol -``` - -### 2 Generate Go bindings -The second command uses abigen (Go Ethereum's ABI generator) to generate Go bindings from the compiled contract's ABI and binary files, placing the resulting Go file in the same directory. This allows Go code to interact with the smart contract. -```bash -abigen --bin=./contract/MessageEmitter.bin --abi=./contract/MessageEmitter.abi --pkg=contract --out=./contract/MessageEmitter.go -``` - diff --git a/integration_tests/evm/evm_logtrigger_test.go b/integration_tests/evm/evm_logtrigger_test.go deleted file mode 100644 index c6efb9b4a..000000000 --- a/integration_tests/evm/evm_logtrigger_test.go +++ /dev/null @@ -1,660 +0,0 @@ -package evmlogtrigger - -import ( - "context" - "encoding/json" - "fmt" - "math/big" - "os" - "path/filepath" - "strings" - "testing" - "time" - - "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" - "go.uber.org/zap/zapcore" - "go.uber.org/zap/zaptest/observer" - "google.golang.org/protobuf/proto" - "gopkg.in/yaml.v3" - - "github.com/smartcontractkit/chainlink-common/pkg/beholder/beholdertest" - "github.com/smartcontractkit/chainlink/v2/core/logger" - - "github.com/stretchr/testify/require" - - commoncap "github.com/smartcontractkit/chainlink-common/pkg/capabilities" - "github.com/smartcontractkit/chainlink-common/pkg/workflows" - "github.com/smartcontractkit/chainlink/v2/core/capabilities/integration_tests/framework" - "github.com/smartcontractkit/chainlink/v2/core/services/gateway/handlers/capabilities" - - "github.com/smartcontractkit/capabilities/integration_tests/evm/contract" - "github.com/smartcontractkit/capabilities/integration_tests/utils" - - "github.com/smartcontractkit/capabilities/chain_capabilities/evm/trigger" - - events2 "github.com/smartcontractkit/chainlink-protos/workflows/go/events" -) - -// NonMatching is a constant string used to denote non-matching events in tests. This literal value must not be printed by the workflow -// when processing matching events, to allow assertions that non-matching events were ignored. -const NonMatching = "NON MATCHING" - -// DeployContractsFunc deploys the necessary contracts for the test and returns their addresses. -type DeployContractsFunc func(t *testing.T, donContext framework.DonContext) []common.Address - -// BuildRuntimeConfigFunc builds a RuntimeConfig given event details, or the current test case parameters. -type BuildRuntimeConfigFunc func(eventName string, abiString string, topic0Hex string) RuntimeConfig - -// EmitEventsFunc emits events using the provided contract and DON context, returning the transactions -// that should be considered as "matching" for the assertions. Implementations are free to emit -// additional non-matching events prior to emitting the matching ones. -type EmitEventsFunc func(t *testing.T, messageEmitters []*contract.Contract, donContext framework.DonContext) []*types.Transaction - -// defaultDeployContracts helper fn to deploy a single instance of the contract. -func defaultDeployContracts(t *testing.T, donContext framework.DonContext) []common.Address { - address, _, _, err := contract.DeployContract(donContext.EthBlockchain.TransactionOpts(), donContext.EthBlockchain.Client()) - require.NoError(t, err) - return []common.Address{address} -} - -type logTriggerTestCase struct { - workflowName string - eventName string - matchingMessages []string - deployContractsFn DeployContractsFunc - buildRuntimeConfigFn BuildRuntimeConfigFunc - emitEventsFn EmitEventsFunc - verifyNonMatchingIgnored bool -} - -func runLogTriggerTests(t *testing.T, testCases []logTriggerTestCase) { - for _, tc := range testCases { - t.Run(tc.workflowName, func(t *testing.T) { - assertLogTriggerWorks(t, tc.eventName, tc.workflowName, tc.matchingMessages, - tc.deployContractsFn, tc.buildRuntimeConfigFn, tc.emitEventsFn, tc.verifyNonMatchingIgnored) - }) - } -} - -// Test_SimpleLogTrigger tests the log trigger with simple matching scenarios for each confidence level. -func Test_SimpleLogTrigger(t *testing.T) { - var testCases []logTriggerTestCase - // adding test cases for each confidence level - confidenceLevelMap := map[int32]string{ - 0: "SAFE", - 1: "LATEST", - 2: "FINALIZED", - } - for confidence, confidenceLabel := range confidenceLevelMap { - message := fmt.Sprintf("Data for log trigger, confidence %s", confidenceLabel) - matchingMsgs := []string{message} - tc := logTriggerTestCase{ - workflowName: fmt.Sprintf("TestSimpleLogTrigger_%s", confidenceLabel), - eventName: "MessageEmitted", - matchingMessages: matchingMsgs, - deployContractsFn: defaultDeployContracts, - buildRuntimeConfigFn: func(eventName, abiString, topic0Hex string) RuntimeConfig { - return RuntimeConfig{ - Topics: []struct { - Values []string `yaml:"values"` - }{ - {Values: []string{topic0Hex}}, - }, - Confidence: confidence, - Abi: abiString, - Event: eventName, - } - }, - emitEventsFn: func(t *testing.T, messageEmitters []*contract.Contract, donContext framework.DonContext) []*types.Transaction { - messageEmitter := messageEmitters[0] - tx, err := messageEmitter.EmitMessage(donContext.EthBlockchain.TransactionOpts(), message) - require.NoError(t, err) - return []*types.Transaction{tx} - }, - verifyNonMatchingIgnored: false, - } - testCases = append(testCases, tc) - } - runLogTriggerTests(t, testCases) -} - -// Test_LogTriggerMultipleTopics tests the log trigger with multiple topic filters while also checking that non-matching events are ignored. -func Test_LogTriggerMultipleTopics(t *testing.T) { - testCases := []logTriggerTestCase{ - { - workflowName: "TestLogTrigger_topic2_filter_LATEST", - eventName: "MultiTopicEmitted", - matchingMessages: []string{"Data for log trigger using topic2 only filter"}, - deployContractsFn: defaultDeployContracts, - buildRuntimeConfigFn: func(eventName, abiString, topic0Hex string) RuntimeConfig { - return RuntimeConfig{ - Topics: []struct { - Values []string `yaml:"values"` - }{ - {Values: []string{topic0Hex}}, - {Values: []string{fmt.Sprintf("0x%064x", uint64(42))}}, // 42, == 0x000000000000000000000000000000000000000000000000000000000000002a - }, - Confidence: 1, // latest - Abi: abiString, - Event: eventName, - } - }, - emitEventsFn: func(t *testing.T, messageEmitters []*contract.Contract, donContext framework.DonContext) []*types.Transaction { - messageEmitter := messageEmitters[0] - var txs []*types.Transaction - // first emit a clearly non-matching event (different topic2) - nonMatchingTopic2 := big.NewInt(999) - topic3 := big.NewInt(999) - topic4 := big.NewInt(888) - // adding the non-matching marker guarantees we can assert it is not processed - nonMatchingMessage := fmt.Sprintf("Data for log trigger %s topic2 only filter", NonMatching) - txNonMatch, err := messageEmitter.EmitMultiTopic(donContext.EthBlockchain.TransactionOpts(), nonMatchingTopic2, topic3, topic4, nonMatchingMessage) - require.NoError(t, err) - txs = append(txs, txNonMatch) - - // then emit the matching event (topic2 == 42) - matchingTopic2 := big.NewInt(42) - txMatch, err := messageEmitter.EmitMultiTopic(donContext.EthBlockchain.TransactionOpts(), matchingTopic2, topic3, topic4, - "Data for log trigger using topic2 only filter") - require.NoError(t, err) - txs = append(txs, txMatch) - - return txs - }, - verifyNonMatchingIgnored: true, - }, - { - workflowName: "TestLogTrigger_topic2_and_topic4_filter_LATEST", - eventName: "MultiTopicEmitted", - matchingMessages: []string{"Data for log trigger using topic2 and topic 4, but not 3, filter"}, - deployContractsFn: defaultDeployContracts, - buildRuntimeConfigFn: func(eventName, abiString, topic0Hex string) RuntimeConfig { - return RuntimeConfig{ - Topics: []struct { - Values []string `yaml:"values"` - }{ - {Values: []string{topic0Hex}}, - {Values: []string{fmt.Sprintf("0x%064x", uint64(42))}}, - {}, - {Values: []string{fmt.Sprintf("0x%064x", uint64(23))}}, - }, - Confidence: 1, // latest - Abi: abiString, - Event: eventName, - } - }, - emitEventsFn: func(t *testing.T, messageEmitters []*contract.Contract, donContext framework.DonContext) []*types.Transaction { - messageEmitter := messageEmitters[0] - var txs []*types.Transaction - - // emit one event that should not match (topic4 != 23) - topic2 := big.NewInt(42) - topic3 := big.NewInt(999) - nonMatchingTopic4 := big.NewInt(999) - // adding the non-matching marker guarantees we can assert it is not processed - nonMatchingMessage := fmt.Sprintf("Data for log trigger %s topic4 filter", NonMatching) - txNonMatch, err := messageEmitter.EmitMultiTopic(donContext.EthBlockchain.TransactionOpts(), topic2, topic3, nonMatchingTopic4, - nonMatchingMessage) - require.NoError(t, err) - txs = append(txs, txNonMatch) - - // emit the matching event (topic2 == 42 and topic4 == 23) - matchingTopic4 := big.NewInt(23) - txMatch, err := messageEmitter.EmitMultiTopic(donContext.EthBlockchain.TransactionOpts(), topic2, topic3, matchingTopic4, - "Data for log trigger using topic2 and topic 4, but not 3, filter") - require.NoError(t, err) - txs = append(txs, txMatch) - - return txs - }, - verifyNonMatchingIgnored: true, - }, - } - - runLogTriggerTests(t, testCases) -} - -// Test_LogTriggerMultipleAddressesAndTopics tests the log trigger with events emitted from multiple contract addresses -// dismissing any non-matching events. -func Test_LogTriggerMultipleAddressesAndTopics(t *testing.T) { - message1 := "Data for log trigger from contract 1 (topic 2 = 42)" - message2 := "Data for log trigger from contract 2 (topic 2 = 23)" - matchingMsgs := []string{message1, message2} - - testCases := []logTriggerTestCase{ - { - workflowName: "TestLogTrigger_MultipleAddresses_LATEST", - eventName: "MultiTopicEmitted", - matchingMessages: matchingMsgs, - deployContractsFn: func(t *testing.T, donContext framework.DonContext) []common.Address { - // deploy two instances of the same contract for testing multiple addresses emissions in the log trigger - addrs := make([]common.Address, 0, 2) - for range 2 { - addr, _, _, err := contract.DeployContract(donContext.EthBlockchain.TransactionOpts(), donContext.EthBlockchain.Client()) - require.NoError(t, err) - addrs = append(addrs, addr) - } - return addrs - }, - buildRuntimeConfigFn: func(eventName, abiString, topic0Hex string) RuntimeConfig { - return RuntimeConfig{ - Topics: []struct { - Values []string `yaml:"values"` - }{ - {Values: []string{topic0Hex}}, - {Values: []string{ - fmt.Sprintf("0x%064x", uint64(42)), - fmt.Sprintf("0x%064x", uint64(23)), - }}, - }, - Confidence: 1, // LATEST - Abi: abiString, - Event: eventName, - } - }, - emitEventsFn: func(t *testing.T, messageEmitters []*contract.Contract, donContext framework.DonContext) []*types.Transaction { - require.Len(t, messageEmitters, 2, "expected two message emitters (two contracts)") - var txs []*types.Transaction - - topic3 := big.NewInt(999) - topic4 := big.NewInt(888) - - // from contract 1: emit + non-matching multi-topic event usint - me1 := messageEmitters[0] - matchingTopic2FirstContract := big.NewInt(42) - tx1, err := me1.EmitMultiTopic(donContext.EthBlockchain.TransactionOpts(), matchingTopic2FirstContract, topic3, topic4, - message1) - require.NoError(t, err) - txs = append(txs, tx1) - - nonMatchingTopic2FirstContract := big.NewInt(999) - nonMatchingMessage := fmt.Sprintf("Data for log trigger %s multipletopic contract1", NonMatching) - tx1NonMatch, err := me1.EmitMultiTopic(donContext.EthBlockchain.TransactionOpts(), nonMatchingTopic2FirstContract, topic3, topic4, nonMatchingMessage) - require.NoError(t, err) - txs = append(txs, tx1NonMatch) - - //from contract 2: emit + another non-matching multi-topic event - me2 := messageEmitters[1] - matchingTopic2SecondContract := big.NewInt(23) - tx2, err := me2.EmitMultiTopic(donContext.EthBlockchain.TransactionOpts(), matchingTopic2SecondContract, topic3, topic4, - message2) - require.NoError(t, err) - txs = append(txs, tx2) - - nonMatchingTopic2SecondContract := big.NewInt(888) - nonMatchingMessage2 := fmt.Sprintf("Data for log trigger %s multipletopic contract2", NonMatching) - tx2NonMatch, err := me2.EmitMultiTopic(donContext.EthBlockchain.TransactionOpts(), nonMatchingTopic2SecondContract, topic3, topic4, nonMatchingMessage2) - require.NoError(t, err) - txs = append(txs, tx2NonMatch) - - return txs - }, - verifyNonMatchingIgnored: true, - }, - } - - runLogTriggerTests(t, testCases) -} - -func assertLogTriggerWorks(t *testing.T, eventName string, workflowName string, matchingMessages []string, - deployContractsFn DeployContractsFunc, - buildConfigFn BuildRuntimeConfigFunc, - emitEventsFn EmitEventsFunc, - verifyNonMatchingIgnored bool) { - ctx := t.Context() - beholderTester := beholdertest.NewObserver(t) - lggr, obs := logger.TestLoggerObserved(t, zapcore.InfoLevel) // change this to debug to print all logs from the trigger/log poller if needed to debug - defer func() { - utils.CleanupCapabilitiesDir(lggr) - }() - - workflowPath, err := filepath.Abs("./workflow") - require.NoError(t, err) - wfFileName := "main_logtrigger_wasip1.go" - mainFile := filepath.Join(workflowPath, wfFileName) - wasmFilename := wfFileName[:len(wfFileName)-3] + ".wasm" - wasmFile := filepath.Join(utils.CapabilitiesDir, wasmFilename) - utils.CreateWasmBinary(t, mainFile, wasmFile) - - abiBytes, err := os.ReadFile("./contract/MessageEmitter.abi") - require.NoError(t, err) - abiString := string(abiBytes) - parsedABI, err := abi.JSON(strings.NewReader(abiString)) - require.NoError(t, err) - event := parsedABI.Events[eventName] - topic0 := event.ID - - numOfWorkflowNodes := 4 - const donF = 1 - nodesPerMessage := numOfWorkflowNodes - donF - - runtimeCfg := buildConfigFn(eventName, abiString, topic0.Hex()) - - lggr.Infof("Setting up DON and workflow for log trigger...") - messageEmitters, donContext := setupDon(ctx, t, lggr, wasmFile, numOfWorkflowNodes, workflowName, runtimeCfg, deployContractsFn) - lggr.Infof("Waiting for log poller filters to be present for test...") - waitUntilLogPollerFiltersArePresent(t, obs, numOfWorkflowNodes) - lggr.Infof("Log poller filters are present for test.") - - // Emit events according to the chosen strategy (can be swapped for other scenarios). - matchingTxs := emitEventsFn(t, messageEmitters, donContext) - for i, tx := range matchingTxs { - lggr.Infof("Message %d emitted in tx: %s", i, tx.Hash().Hex()) - receipt, err := bind.WaitMined(ctx, donContext.EthBlockchain.Client(), tx) - require.NoError(t, err) - lggr.Infof("Transaction %d mined in block: %d", i, receipt.BlockNumber.Uint64()) - } - - foundEventsByMessage := make(map[string]int, len(matchingMessages)) - for _, msg := range matchingMessages { - foundEventsByMessage[msg] = 0 - } - - // assertion to validate we get the expected number of events in beholder logs. - // A matching message is considered delivered once at least nodesPerMessage (N - F) - // nodes have emitted a user-log containing it — the DON's consensus tolerance. - lggr.Infof("Waiting for workflow logs to be emitted for test (quorum %d-of-%d per message)...", nodesPerMessage, numOfWorkflowNodes) - finalCounts := make(map[string]int, len(matchingMessages)) - require.Eventually(t, func() bool { - // reset counts on each poll as beholder logs are re-fetched entirely each time - for msg := range foundEventsByMessage { - foundEventsByMessage[msg] = 0 - } - - workflowLogs := getBeholderLogsForWorkflow(beholderTester, t) - if len(workflowLogs) < nodesPerMessage { - lggr.Infof("Workflow logs not emitted yet for test, current size: %d, need at least: %d", len(workflowLogs), nodesPerMessage) - return false - } - - sawUnexpectedNonMatching := false - for index, logs := range workflowLogs { - // Each beholder UserLogs message typically carries one LogLine; bursty workflows - // may batch more than one. Treat anything other than 1 as a transient signal and - // retry rather than failing the test outright. - if len(logs) != 1 { - lggr.Infow("Beholder UserLogs message had unexpected line count, retrying", "index", index, "lineCount", len(logs)) - return false - } - log := logs[0] - logMessage := log.GetMessage() - lggr.Infow("Beholder log line", "index", index, "message", logMessage, "nodeTimestamp", log.GetNodeTimestamp()) - for _, matchingMessage := range matchingMessages { - if strings.Contains(logMessage, matchingMessage) { - foundEventsByMessage[matchingMessage]++ - lggr.Infow("Log emitted message contains message", "matchingMessage", matchingMessage, "count", foundEventsByMessage[matchingMessage], "nodesPerMessage", nodesPerMessage) - } - } - if verifyNonMatchingIgnored && strings.Contains(logMessage, NonMatching) { - // For scenarios where we purposely emitted non-matching events, assert that - // no unexpected messages (e.g. non-matching payloads) show up in the workflow logs. - // This is a coarse-grained check: if we ever evolve the workflow to log the - // raw topics or payloads of non-matching events, we should refine this assertion - // to be more specific. - lggr.Errorw("Non-matching event leaked into workflow logs", "message", logMessage) - sawUnexpectedNonMatching = true - } - } - require.False(t, sawUnexpectedNonMatching, "Non-matching events should not be processed by the log trigger/workflow.") - - // remove any messages that have already met quorum from the pending map - for msg, found := range foundEventsByMessage { - finalCounts[msg] = found - if found >= nodesPerMessage { - lggr.Infof("Quorum reached for message %q: %d/%d nodes emitted (full=%d)", - msg, found, nodesPerMessage, numOfWorkflowNodes) - delete(foundEventsByMessage, msg) - } - } - return len(foundEventsByMessage) == 0 - }, 90*time.Second, 2*time.Second, - "Expected each matching message to reach %d-of-%d nodes, observed: %+v", nodesPerMessage, numOfWorkflowNodes, foundEventsByMessage) - - // Surface partial losses (quorum hit but not unanimous) so a real degradation is still visible - // without failing the test for a single missing node. - for _, msg := range matchingMessages { - if c := finalCounts[msg]; c < numOfWorkflowNodes { - t.Logf("WARN partial user-log delivery for message %q: %d/%d nodes (quorum %d satisfied)", - msg, c, numOfWorkflowNodes, nodesPerMessage) - } - } - - // Verify ACKs for each matching delivery. BaseTrigger logs Infow("Event ACK", "eventID", ...). - // - // We locate ACKs by tx hash embedded in eventID; for each matching message there must be a - // tx in matchingTxs whose log carried that message. - require.NotEmpty(t, matchingMessages, "test case must declare at least one matching message") - type ackTarget struct { - msg string - txHash string // 0x-prefixed for logging - txHex string // lowercase, no 0x prefix; substring we look for in eventID - } - targets := make([]ackTarget, 0, len(matchingMessages)) - for _, msg := range matchingMessages { - tx := findTxForMatchingMessage(matchingTxs, msg) - require.NotNilf(t, tx, "no emitted tx found for matching message %q (emitEventsFn must return txs for matching emits)", msg) - hashHex := tx.Hash().Hex() - targets = append(targets, ackTarget{ - msg: msg, - txHash: hashHex, - txHex: strings.TrimPrefix(strings.ToLower(hashHex), "0x"), - }) - } - - matchedTxHashes := make(map[string]string, len(targets)) - require.Eventually(t, func() bool { - ackLogs := obs.FilterMessageSnippet("Event ACK").All() - matched := 0 - for _, target := range targets { - for _, log := range ackLogs { - if eventAckLogContainsTxHash(log, target.txHex) { - matched++ - if _, seen := matchedTxHashes[target.txHash]; !seen { - matchedTxHashes[target.txHash] = fmt.Sprint(log.ContextMap()["eventID"]) - } - break - } - } - } - return matched == len(targets) - }, 90*time.Second, 1*time.Second, "expected ACK logs for each matching workflow message; matched so far: %v", matchedTxHashes) - - for _, target := range targets { - t.Logf("ACK matched for message %q tx %s eventID=%s", target.msg, target.txHash, matchedTxHashes[target.txHash]) - } -} - -// findTxForMatchingMessage returns the first tx whose corresponding receipt log should carry the -// given message payload (used to pair matchingMessages with txs for ACK lookup). -func findTxForMatchingMessage(txs []*types.Transaction, matchingMsg string) *types.Transaction { - for _, tx := range txs { - if tx == nil { - continue - } - if bytesContainsEmitPayload(tx, matchingMsg) { - return tx - } - } - return nil -} - -func bytesContainsEmitPayload(tx *types.Transaction, substr string) bool { - if tx == nil { - return false - } - d := tx.Data() - if len(d) == 0 || len(substr) == 0 { - return false - } - return strings.Contains(string(d), substr) -} - -// eventAckLogContainsTxHash reports whether a zap observed "Event ACK" log's structured -// eventID field references txHex (lowercase, no 0x prefix). Composite event IDs embed the tx hash. -func eventAckLogContainsTxHash(log observer.LoggedEntry, txHexLowerNo0x string) bool { - raw, ok := log.ContextMap()["eventID"] - if !ok || raw == nil { - return false - } - ev, ok := raw.(string) - if !ok { - ev = fmt.Sprint(raw) - } - evNorm := strings.TrimPrefix(strings.ToLower(ev), "0x") - return strings.Contains(evNorm, txHexLowerNo0x) -} - -func waitUntilLogPollerFiltersArePresent(t *testing.T, obs *observer.ObservedLogs, numOfWorkflowNodes int) { - require.Eventually(t, func() bool { - logs := obs. - FilterMessageSnippet("Inserted filter"). - Filter(func(e observer.LoggedEntry) bool { - for _, ctxField := range e.Context { - if ctxField.Key == "name" && strings.Contains(ctxField.String, trigger.SuffixLogTriggerFilterID) { - return true - } - } - return false - }). - All() - return len(logs) == numOfWorkflowNodes - }, 2*time.Minute, - 3*time.Second, "Expected to find %d log poller filters", numOfWorkflowNodes) -} - -func registerWorkflow(t *testing.T, donContext framework.DonContext, workflowName string, compressedBinary []byte, - secretsURL string, workflowDon *framework.DON, binaryURL string, configURL string, configBytes []byte) { - workflowID, err := workflows.GenerateWorkflowID(donContext.EthBlockchain.TransactionOpts().From[:], workflowName, compressedBinary, configBytes, secretsURL) - require.NoError(t, err) - - err = workflowDon.AddWorkflow(framework.Workflow{ - Name: workflowName, - ID: workflowID, - Status: 0, - BinaryURL: binaryURL, - ConfigURL: configURL, - SecretsURL: secretsURL, - }) - require.NoError(t, err) -} - -func getBeholderLogsForWorkflow(beholderTester beholdertest.Observer, t *testing.T) [][]*events2.LogLine { - var workflowLogs [][]*events2.LogLine - - userMsgs := beholderTester.Messages(t, "beholder_data_schema", "/cre-events-user-logs/v1") - if len(userMsgs) > 0 { - for _, userMsg := range userMsgs { - userLog := events2.UserLogs{} - err := proto.Unmarshal(userMsg.Body, &userLog) - require.NoError(t, err) - t.Logf("Beholder Observer logs: Payload.msg: %v\n", &userLog.LogLines) - workflowLogs = append(workflowLogs, userLog.LogLines) - } - } - - return workflowLogs -} - -type EVMCapabilityConfig struct { - ChainID uint64 `json:"chainId"` - Network string `json:"network"` - LogTriggerPollInterval time.Duration `json:"logTriggerPollInterval"` - CREForwarderAddress string `json:"creForwarderAddress"` - ReceiverGasMinimum uint64 `json:"receiverGasMinimum"` - NodeAddress string `json:"nodeAddress"` - DeltaStage time.Duration `json:"deltaStage"` - IsLocal bool `json:"isLocal"` -} - -func CreateEvmCapabilityConfig(t *testing.T, chainID uint64, network string, duration time.Duration) string { - readContractConfig := EVMCapabilityConfig{ - ChainID: chainID, - Network: network, - LogTriggerPollInterval: duration, - CREForwarderAddress: "1234567890abcdef1234567890abcdef12345678", //fake address for testing - ReceiverGasMinimum: 1, - NodeAddress: "fakeAddressForTesting", //fake address for testing - DeltaStage: time.Second, - IsLocal: true, //bypass transmission scheduler initialization, since we don't use write report in our test anyway - } - - configJSON, err := json.Marshal(readContractConfig) - if err != nil { - t.Fatalf("failed to marshal evm capability config: %v", err) - } - - readCapabilityConfig := "'''" + string(configJSON) + "'''" - return readCapabilityConfig -} - -func setupDon(ctx context.Context, t *testing.T, lggr logger.Logger, workflowURL string, numOfWorkflowNodes int, - workflowName string, config RuntimeConfig, deployContractsFn DeployContractsFunc) ([]*contract.Contract, framework.DonContext) { - configURL := workflowName + "_config.yaml" - compressedBinary, base64EncodedCompressedBinary := utils.GetCompressedWorkflowWasm(t, workflowURL) - - urlToConfigBytes := map[string][]byte{} - - syncerFetcherFunc := func(ctx context.Context, messageID string, req capabilities.Request) ([]byte, error) { - url := req.URL - switch url { - case workflowURL: - return []byte(base64EncodedCompressedBinary), nil - case configURL: - return urlToConfigBytes[configURL], nil - } - return nil, fmt.Errorf("unknown url: %s", url) - } - - donContext := framework.CreateDonContextWithWorkflowRegistry(ctx, t, syncerFetcherFunc, utils.NoopComputeFetcherFactory{}) - - addresses := deployContractsFn(t, donContext) - config.Addresses = make([]string, 0, len(addresses)) - messageEmitters := make([]*contract.Contract, 0, len(addresses)) - for _, addr := range addresses { - lggr.Infof("Deploy contract address: %s", addr) - config.Addresses = append(config.Addresses, addr.Hex()) - - messageEmitter, err := contract.NewContract(addr, donContext.EthBlockchain.Client()) - require.NoError(t, err) - messageEmitters = append(messageEmitters, messageEmitter) - } - - data, err := yaml.Marshal(config) - require.NoError(t, err) - t.Logf("Runtime yaml config:\n%s\n", string(data)) - urlToConfigBytes[configURL] = data - - evmBinary, err := utils.DeployCapability(t, "chain_capabilities/evm") - require.NoError(t, err) - - workflowDonConfiguration, err := framework.NewDonConfiguration(framework.NewDonConfigurationParams{Name: workflowName + "DonName", NumNodes: numOfWorkflowNodes, F: 1, AcceptsWorkflows: true}) - require.NoError(t, err) - - workflowDon := framework.NewDON(ctx, t, lggr, workflowDonConfiguration, - []commoncap.DON{}, - donContext, true, 1*time.Second) - - evmConfig := CreateEvmCapabilityConfig(t, 1337, "evm", 3*time.Second) - workflowDon.AddStandardCapability("evm-capabilities", evmBinary, evmConfig) - - workflowDon.AddOCR3NonStandardCapability() - workflowDon.Initialise() - - require.NoError(t, workflowDon.Start(t.Context())) - t.Cleanup(func() { - if err := workflowDon.Close(); err != nil && - !strings.Contains(err.Error(), "stopped") { - require.NoError(t, err) - } - }) - - donContext.WaitForCapabilitiesToBeExposed(t, workflowDon) - - registerWorkflow(t, donContext, workflowName, compressedBinary, "", workflowDon, - workflowURL, configURL, urlToConfigBytes[configURL]) - - return messageEmitters, donContext -} diff --git a/integration_tests/evm/logTriggerConfig.go b/integration_tests/evm/logTriggerConfig.go deleted file mode 100644 index db4c84f00..000000000 --- a/integration_tests/evm/logTriggerConfig.go +++ /dev/null @@ -1,13 +0,0 @@ -package evmlogtrigger - -// RuntimeConfig is shared between the workflow main files and the integration tests -// to avoid duplication of the YAML structure used to configure the log trigger. -type RuntimeConfig struct { - Addresses []string `yaml:"addresses"` - Topics []struct { - Values []string `yaml:"values"` - } `yaml:"topics" json:"Topics,omitempty"` - Confidence int32 `yaml:"confidence"` - Abi string `yaml:"abi,omitempty"` - Event string `yaml:"event,omitempty"` -} diff --git a/integration_tests/evm/workflow/main_logtrigger_wasip1.go b/integration_tests/evm/workflow/main_logtrigger_wasip1.go deleted file mode 100644 index b8e917b35..000000000 --- a/integration_tests/evm/workflow/main_logtrigger_wasip1.go +++ /dev/null @@ -1,136 +0,0 @@ -package main - -import ( - "encoding/hex" - "fmt" - "log/slog" - "strings" - - "github.com/ethereum/go-ethereum/accounts/abi" - chainselectors "github.com/smartcontractkit/chain-selectors" - "github.com/smartcontractkit/cre-sdk-go/capabilities/blockchain/evm" - "github.com/smartcontractkit/cre-sdk-go/cre" - "github.com/smartcontractkit/cre-sdk-go/cre/wasm" - "gopkg.in/yaml.v3" - - "github.com/smartcontractkit/capabilities/integration_tests/evm" -) - -func RunSimpleEvmLogTriggerWorkflow( - config *evmlogtrigger.RuntimeConfig, - logger *slog.Logger, - _ cre.SecretsProvider, -) (cre.Workflow[*evmlogtrigger.RuntimeConfig], error) { - _ = logger // not used directly; we log via runtime inside handlers - - topics := []*evm.TopicValues{ - { - Values: toByteSlices(config.Topics[0].Values), - }, - } - for i := 1; i < 4; i++ { - if i < len(config.Topics) { - topics = append(topics, &evm.TopicValues{ - Values: toByteSlices(config.Topics[i].Values), - }) - } else { - topics = append(topics, &evm.TopicValues{ - Values: [][]byte{}, - }) - } - } - - cfg := &evm.FilterLogTriggerRequest{ - Addresses: toByteSlices(config.Addresses), - Topics: topics, - Confidence: evm.ConfidenceLevel(config.Confidence), - } - - logger.Info(fmt.Sprintf( - "EVM FilterLogTriggerRequest config: addresses: %v, topics: %v, confidence: %v", - formatHexSlices(cfg.Addresses), - formatHexTopics(cfg.Topics), - cfg.Confidence, - )) - - return cre.Workflow[*evmlogtrigger.RuntimeConfig]{ - cre.Handler( - evm.LogTrigger(chainselectors.GETH_TESTNET.Selector, cfg), - onTrigger, - ), - }, nil -} - -// formatHexSlices formats a slice of byte slices as hex strings. -func formatHexSlices(slices [][]byte) []string { - result := make([]string, len(slices)) - for i, b := range slices { - result[i] = "0x" + hex.EncodeToString(b) - } - return result -} - -// formatHexTopics formats a slice of *evm.TopicValues as hex strings. -func formatHexTopics(topics []*evm.TopicValues) [][]string { - result := make([][]string, len(topics)) - for i, t := range topics { - result[i] = formatHexSlices(t.Values) - } - return result -} - -func onTrigger(config *evmlogtrigger.RuntimeConfig, runtime cre.Runtime, outputs *evm.Log) (string, error) { - runtime.Logger().With().Info(fmt.Sprintf("OnTrigger txHash: %s log index: %d", hex.EncodeToString(outputs.TxHash), outputs.Index)) - - decodedMessageString, err := printDecodedData(config.Abi, config.Event, outputs.Data) - if err != nil { - runtime.Logger().With().Error(fmt.Sprintf("Error decoding log data: %v", err)) - return "", fmt.Errorf("error decoding log data: %w", err) - } - - runtime.Logger().With().Info(fmt.Sprintf("OnTrigger decoded message: %s", decodedMessageString)) - return "success", nil -} - -func printDecodedData(eventABI string, eventName string, data []byte) (string, error) { - parsedABI, err := abi.JSON(strings.NewReader(eventABI)) - if err != nil { - return "", err - } - event := parsedABI.Events[eventName] - values := make(map[string]interface{}) - if err := event.Inputs.UnpackIntoMap(values, data); err != nil { - return "", err - } - - var sb strings.Builder - first := true - for k, v := range values { - if !first { - sb.WriteString("; ") - } - sb.WriteString(fmt.Sprintf("%s:%v", k, v)) - first = false - } - return sb.String(), nil -} - -func main() { - wasm.NewRunner(func(b []byte) (*evmlogtrigger.RuntimeConfig, error) { - cfg := &evmlogtrigger.RuntimeConfig{} - if err := yaml.Unmarshal(b, cfg); err != nil { - return nil, fmt.Errorf("error unmarshalling config: %w", err) - } - return cfg, nil - }).Run(RunSimpleEvmLogTriggerWorkflow) -} - -func toByteSlices(addresses []string) [][]byte { - result := make([][]byte, len(addresses)) - for i, addr := range addresses { - // Assumes addresses are hex strings with or without 0x prefix - b, _ := hex.DecodeString(strings.TrimPrefix(addr, "0x")) - result[i] = b - } - return result -} diff --git a/integration_tests/go.mod b/integration_tests/go.mod deleted file mode 100644 index 9485e454a..000000000 --- a/integration_tests/go.mod +++ /dev/null @@ -1,437 +0,0 @@ -module github.com/smartcontractkit/capabilities/integration_tests - -go 1.26.4 - -replace github.com/smartcontractkit/capabilities/http_action => ../http_action - -replace github.com/smartcontractkit/capabilities/http_trigger => ../http_trigger - -replace github.com/smartcontractkit/capabilities/chain_capabilities/evm => ../chain_capabilities/evm - -replace github.com/smartcontractkit/capabilities/chain_capabilities/common => ../chain_capabilities/common - -replace github.com/fbsobreira/gotron-sdk => github.com/smartcontractkit/chainlink-tron/relayer/gotron-sdk v0.0.5-0.20251014124537-af6b1684fe15 - -replace github.com/olekukonko/tablewriter => github.com/olekukonko/tablewriter v0.0.5 - -require ( - github.com/BurntSushi/toml v1.6.0 - github.com/andybalholm/brotli v1.2.1 - github.com/ethereum/go-ethereum v1.17.4 - github.com/google/uuid v1.6.0 - github.com/jonboulle/clockwork v0.5.0 - github.com/smartcontractkit/capabilities/chain_capabilities/evm v0.0.0-00010101000000-000000000000 - github.com/smartcontractkit/capabilities/http_action v0.0.0-00010101000000-000000000000 - github.com/smartcontractkit/capabilities/http_trigger v0.0.0-00010101000000-000000000000 - github.com/smartcontractkit/chain-selectors v1.0.106 - github.com/smartcontractkit/chainlink-common v0.11.2-0.20260722132052-c7af471801f2 - github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260716141634-c0cc05ed05d8 - github.com/smartcontractkit/chainlink/v2 v2.29.1-cre-beta.0.0.20260722144435-8217cb5fab8b - github.com/smartcontractkit/cre-sdk-go v1.9.0-capdev.1.0.20260625132924-dcceeb57cf3c - github.com/smartcontractkit/cre-sdk-go/capabilities/blockchain/evm v0.6.0 - github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v1.3.0 - github.com/stretchr/testify v1.11.1 - go.uber.org/zap v1.28.0 - google.golang.org/protobuf v1.36.11 - gopkg.in/yaml.v3 v3.0.1 -) - -require ( - cosmossdk.io/api v0.7.6 // indirect - cosmossdk.io/collections v0.4.0 // indirect - cosmossdk.io/core v0.11.0 // indirect - cosmossdk.io/depinject v1.1.0 // indirect - cosmossdk.io/errors v1.0.1 // indirect - cosmossdk.io/log v1.4.1 // indirect - cosmossdk.io/math v1.4.0 // indirect - cosmossdk.io/store v1.1.1 // indirect - cosmossdk.io/x/tx v0.13.7 // indirect - filippo.io/bigmod v0.1.0 // indirect - filippo.io/edwards25519 v1.1.1 // indirect - filippo.io/nistec v0.0.4 // indirect - github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect - github.com/99designs/keyring v1.2.1 // indirect - github.com/Azure/go-ntlmssp v0.1.1 // indirect - github.com/DataDog/zstd v1.5.7 // indirect - github.com/Depado/ginprom v1.8.0 // indirect - github.com/Masterminds/semver/v3 v3.5.0 // indirect - github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/NethermindEth/juno v0.15.11 // indirect - github.com/NethermindEth/starknet.go v0.17.1 // indirect - github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20260416073033-7c2071eaa8d4 // indirect - github.com/VictoriaMetrics/fastcache v1.13.0 // indirect - github.com/XSAM/otelsql v0.42.0 // indirect - github.com/apache/arrow-go/v18 v18.6.0 // indirect - github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect - github.com/aptos-labs/aptos-go-sdk v1.13.0 // indirect - github.com/atombender/go-jsonschema v0.16.1-0.20240916205339-a74cd4e2851c // indirect - github.com/avast/retry-go/v4 v4.7.0 // indirect - github.com/bahlo/generic-list-go v0.2.0 // indirect - github.com/beevik/ntp v1.5.0 // indirect - github.com/benbjohnson/clock v1.3.5 // indirect - github.com/beorn7/perks v1.0.1 // indirect - github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect - github.com/bits-and-blooms/bitset v1.24.4 // indirect - github.com/blendle/zapdriver v1.3.1 // indirect - github.com/block-vision/sui-go-sdk v1.2.1 // indirect - github.com/btcsuite/btcd v0.24.2 // indirect - github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect - github.com/btcsuite/btcd/btcutil v1.1.6 // indirect - github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect - github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce // indirect - github.com/buger/jsonparser v1.2.0 // indirect - github.com/buraksezer/consistent v0.10.0 // indirect - github.com/bytecodealliance/wasmtime-go/v47 v47.0.0 // indirect - github.com/bytedance/sonic v1.12.3 // indirect - github.com/bytedance/sonic/loader v0.2.0 // indirect - github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/cenkalti/backoff/v5 v5.0.3 // indirect - github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/clipperhouse/uax29/v2 v2.7.0 // indirect - github.com/cloudevents/sdk-go/binding/format/protobuf/v2 v2.16.2 // indirect - github.com/cloudevents/sdk-go/v2 v2.16.2 // indirect - github.com/cloudwego/base64x v0.1.4 // indirect - github.com/cloudwego/iasm v0.2.0 // indirect - github.com/cockroachdb/errors v1.12.0 // indirect - github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0 // indirect - github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 // indirect - github.com/cockroachdb/pebble v1.1.5 // indirect - github.com/cockroachdb/redact v1.1.6 // indirect - github.com/cockroachdb/tokenbucket v0.0.0-20250429170803-42689b6311bb // indirect - github.com/coder/websocket v1.8.14 // indirect - github.com/cometbft/cometbft v0.38.21 // indirect - github.com/cometbft/cometbft-db v1.0.1 // indirect - github.com/consensys/gnark-crypto v0.20.1 // indirect - github.com/coreos/go-oidc/v3 v3.11.0 // indirect - github.com/cosmos/btcutil v1.0.5 // indirect - github.com/cosmos/cosmos-db v1.1.1 // indirect - github.com/cosmos/cosmos-proto v1.0.0-beta.5 // indirect - github.com/cosmos/cosmos-sdk v0.50.14 // indirect - github.com/cosmos/go-bip39 v1.0.0 // indirect - github.com/cosmos/gogoproto v1.7.0 // indirect - github.com/cosmos/ics23/go v0.11.0 // indirect - github.com/cosmos/ledger-cosmos-go v0.14.0 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect - github.com/crate-crypto/go-eth-kzg v1.5.0 // indirect - github.com/danieljoos/wincred v1.2.1 // indirect - github.com/danielkov/gin-helmet v0.0.0-20171108135313-1387e224435e // indirect - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/dchest/siphash v1.2.3 // indirect - github.com/deckarep/golang-set/v2 v2.9.0 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 // indirect - github.com/dgraph-io/badger/v4 v4.7.0 // indirect - github.com/dgraph-io/ristretto/v2 v2.2.0 // indirect - github.com/docker/go-connections v0.7.0 // indirect - github.com/dominikbraun/graph v0.23.0 // indirect - github.com/doyensec/safeurl v0.2.5 // indirect - github.com/dustin/go-humanize v1.0.1 // indirect - github.com/dvsekhvalnov/jose2go v1.7.0 // indirect - github.com/emicklei/dot v1.6.2 // indirect - github.com/esote/minmaxheap v1.0.0 // indirect - github.com/ethereum/c-kzg-4844/v2 v2.1.7 // indirect - github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab // indirect - github.com/expr-lang/expr v1.17.8 // indirect - github.com/failsafe-go/failsafe-go v0.9.0 // indirect - github.com/fatih/color v1.19.0 // indirect - github.com/fbsobreira/gotron-sdk v0.0.0-20250403083053-2943ce8c759b // indirect - github.com/ferranbt/fastssz v0.1.4 // indirect - github.com/fjl/jsonw v0.1.0 // indirect - github.com/fsnotify/fsnotify v1.10.1 // indirect - github.com/fxamacker/cbor/v2 v2.9.2 // indirect - github.com/gabriel-vasile/mimetype v1.4.13 // indirect - github.com/gagliardetto/binary v0.8.0 // indirect - github.com/gagliardetto/solana-go v1.13.0 // indirect - github.com/gagliardetto/treeout v0.1.4 // indirect - github.com/gedex/inflector v0.0.0-20170307190818-16278e9db813 // indirect - github.com/getsentry/sentry-go v0.35.1 // indirect - github.com/gin-contrib/cors v1.7.2 // indirect - github.com/gin-contrib/expvar v0.0.1 // indirect - github.com/gin-contrib/sessions v0.0.5 // indirect - github.com/gin-contrib/size v0.0.0-20230212012657-e14a14094dc4 // indirect - github.com/gin-contrib/sse v0.1.0 // indirect - github.com/gin-gonic/gin v1.10.1 // indirect - github.com/go-asn1-ber/asn1-ber v1.5.5 // indirect - github.com/go-jose/go-jose/v4 v4.1.4 // indirect - github.com/go-json-experiment/json v0.0.0-20260505212615-e40f80bf6836 // indirect - github.com/go-kit/kit v0.13.0 // indirect - github.com/go-kit/log v0.2.1 // indirect - github.com/go-ldap/ldap/v3 v3.4.6 // indirect - github.com/go-logfmt/logfmt v0.6.0 // indirect - github.com/go-logr/logr v1.4.3 // indirect - github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-ole/go-ole v1.3.0 // indirect - github.com/go-playground/locales v0.14.1 // indirect - github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.30.3 // indirect - github.com/go-viper/mapstructure/v2 v2.5.0 // indirect - github.com/go-webauthn/webauthn v0.9.4 // indirect - github.com/go-webauthn/x v0.1.5 // indirect - github.com/goccy/go-json v0.10.6 // indirect - github.com/goccy/go-yaml v1.19.2 // indirect - github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect - github.com/gofrs/flock v0.12.1 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v4 v4.5.2 // indirect - github.com/golang-jwt/jwt/v5 v5.3.1 // indirect - github.com/golang/protobuf v1.5.4 // indirect - github.com/golang/snappy v1.0.0 // indirect - github.com/google/btree v1.1.3 // indirect - github.com/google/flatbuffers v25.12.19+incompatible // indirect - github.com/google/go-cmp v0.7.0 // indirect - github.com/google/go-tpm v0.9.0 // indirect - github.com/google/pprof v0.0.0-20260302011040-a15ffb7f9dcc // indirect - github.com/gorilla/context v1.1.1 // indirect - github.com/gorilla/securecookie v1.1.2 // indirect - github.com/gorilla/sessions v1.2.2 // indirect - github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect - github.com/grafana/otel-profiling-go v0.5.1 // indirect - github.com/grafana/pyroscope-go v1.3.0 // indirect - github.com/grafana/pyroscope-go/godeltaprof v0.1.10 // indirect - github.com/grafana/regexp v0.0.0-20250905093917-f7b3be9d1853 // indirect - github.com/graph-gophers/dataloader v5.0.0+incompatible // indirect - github.com/graph-gophers/graphql-go v1.5.0 // indirect - github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.1.0 // indirect - github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.3 // indirect - github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 // indirect - github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect - github.com/hashicorp/go-bexpr v0.1.10 // indirect - github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-envparse v0.1.0 // indirect - github.com/hashicorp/go-hclog v1.6.3 // indirect - github.com/hashicorp/go-immutable-radix v1.3.1 // indirect - github.com/hashicorp/go-metrics v0.5.4 // indirect - github.com/hashicorp/go-plugin v1.8.0 // indirect - github.com/hashicorp/go-retryablehttp v0.7.8 // indirect - github.com/hashicorp/golang-lru v1.0.2 // indirect - github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect - github.com/hashicorp/yamux v0.1.2 // indirect - github.com/hasura/go-graphql-client v0.15.1 // indirect - github.com/hdevalence/ed25519consensus v0.2.0 // indirect - github.com/holiman/billy v0.0.0-20250707135307-f2f9b9aae7db // indirect - github.com/holiman/bloomfilter/v2 v2.0.3 // indirect - github.com/holiman/uint256 v1.3.2 // indirect - github.com/huin/goupnp v1.3.0 // indirect - github.com/iancoleman/strcase v0.3.0 // indirect - github.com/imdario/mergo v0.3.16 // indirect - github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/influxdata/tdigest v0.0.1 // indirect - github.com/invopop/jsonschema v0.14.0 // indirect - github.com/jackc/pgio v1.0.0 // indirect - github.com/jackc/pgpassfile v1.0.0 // indirect - github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect - github.com/jackc/pgtype v1.14.4 // indirect - github.com/jackc/pgx/v5 v5.9.2 // indirect - github.com/jackc/puddle/v2 v2.2.2 // indirect - github.com/jackpal/go-nat-pmp v1.0.2 // indirect - github.com/jmhodges/levigo v1.0.0 // indirect - github.com/jmoiron/sqlx v1.4.0 // indirect - github.com/jpillora/backoff v1.0.0 // indirect - github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.18.6 // indirect - github.com/klauspost/cpuid/v2 v2.3.0 // indirect - github.com/kr/pretty v0.3.1 // indirect - github.com/kr/text v0.2.0 // indirect - github.com/kylelemons/godebug v1.1.0 // indirect - github.com/leanovate/gopter v0.2.11 // indirect - github.com/leodido/go-urn v1.4.0 // indirect - github.com/lib/pq v1.12.3 // indirect - github.com/linxGnu/grocksdb v1.9.3 // indirect - github.com/logrusorgru/aurora v2.0.3+incompatible // indirect - github.com/manyminds/api2go v0.0.0-20171030193247-e7b693844a6f // indirect - github.com/marcboeker/go-duckdb v1.8.5 // indirect - github.com/mattn/go-colorable v0.1.14 // indirect - github.com/mattn/go-isatty v0.0.22 // indirect - github.com/mattn/go-runewidth v0.0.24 // indirect - github.com/mfridman/interpolate v0.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/go-testing-interface v1.14.1 // indirect - github.com/mitchellh/go-wordwrap v1.0.1 // indirect - github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect - github.com/mitchellh/pointerstructure v1.2.0 // indirect - github.com/moby/moby/client v0.4.1 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect - github.com/mostynb/zstdpool-freelist v0.0.0-20201229113212-927304c0c3b1 // indirect - github.com/mr-tron/base58 v1.3.0 // indirect - github.com/mtibben/percent v0.2.1 // indirect - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/oapi-codegen/runtime v1.1.2 // indirect - github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect - github.com/oklog/run v1.2.0 // indirect - github.com/olekukonko/tablewriter v1.0.9 // indirect - github.com/onsi/gomega v1.38.2 // indirect - github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b // indirect - github.com/patrickmn/go-cache v2.1.0+incompatible // indirect - github.com/pb33f/ordered-map/v2 v2.3.1 // indirect - github.com/pelletier/go-toml v1.9.5 // indirect - github.com/pelletier/go-toml/v2 v2.3.1 // indirect - github.com/peterldowns/pgtestdb v0.1.1 // indirect - github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect - github.com/pierrec/lz4/v4 v4.1.26 // indirect - github.com/pion/dtls/v3 v3.1.2 // indirect - github.com/pion/logging v0.2.4 // indirect - github.com/pion/stun/v3 v3.1.2 // indirect - github.com/pion/transport/v4 v4.0.1 // indirect - github.com/pkg/errors v0.9.1 // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect - github.com/pressly/goose/v3 v3.26.0 // indirect - github.com/prometheus/client_golang v1.23.2 // indirect - github.com/prometheus/client_model v0.6.2 // indirect - github.com/prometheus/common v1.20.99 // indirect - github.com/prometheus/procfs v0.20.1 // indirect - github.com/prometheus/prometheus v0.311.3 // indirect - github.com/robfig/cron/v3 v3.0.1 // indirect - github.com/rogpeppe/go-internal v1.14.1 // indirect - github.com/rs/cors v1.11.1 // indirect - github.com/rs/zerolog v1.35.1 // indirect - github.com/russross/blackfriday/v2 v2.1.0 // indirect - github.com/samber/lo v1.53.0 // indirect - github.com/sanity-io/litter v1.5.5 // indirect - github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 // indirect - github.com/sasha-s/go-deadlock v0.3.5 // indirect - github.com/scylladb/go-reflectx v1.0.1 // indirect - github.com/sethvargo/go-retry v0.3.0 // indirect - github.com/shirou/gopsutil v3.21.11+incompatible // indirect - github.com/shirou/gopsutil/v3 v3.24.3 // indirect - github.com/shopspring/decimal v1.4.0 // indirect - github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3 // indirect - github.com/smartcontractkit/capabilities/chain_capabilities/common v0.0.0-20260729165045-b00a39493e13 // indirect - github.com/smartcontractkit/capabilities/libs v0.0.0-20260714133332-db2a5f11cd64 // indirect - github.com/smartcontractkit/chainlink-aptos/codec v0.0.0-20260716230027-bd85997bc03c // indirect - github.com/smartcontractkit/chainlink-automation v0.8.1 // indirect - github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260715130435-1e32cea69af1 // indirect - github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260624154507-ea7ff77a0ddb // indirect - github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260415165642-49f23e4d76cc // indirect - github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20260415165642-49f23e4d76cc // indirect - github.com/smartcontractkit/chainlink-ccv v0.1.1-0.20260716164331-d938b371c5d6 // indirect - github.com/smartcontractkit/chainlink-common/keystore v1.2.1-0.20260623104656-f39eba3e2bc6 // indirect - github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260716165322-7f2edff6e954 // indirect - github.com/smartcontractkit/chainlink-data-streams v1.0.0 // indirect - github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260722105404-d3fb34ccc58b // indirect - github.com/smartcontractkit/chainlink-evm/contracts/cre/gobindings v0.0.0-20260403151002-2c91155b5501 // indirect - github.com/smartcontractkit/chainlink-evm/gethwrappers v0.0.0-20260512150409-b4068bf735e6 // indirect - github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135 // indirect - github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20260423135514-5b1a7565a99c // indirect - github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20260714194015-527495d10a6c // indirect - github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20260709082627-78ab5315e367 // indirect - github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20260625152110-9afcf56e4053 // indirect - github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20251024234028-0988426d98f4 // indirect - github.com/smartcontractkit/chainlink-protos/chainlink-ccv/committee-verifier v0.0.0-20251211142334-5c3421fe2c8d // indirect - github.com/smartcontractkit/chainlink-protos/chainlink-ccv/heartbeat v0.0.0-20260115142640-f6b99095c12e // indirect - github.com/smartcontractkit/chainlink-protos/chainlink-ccv/message-discovery v0.0.0-20251211142334-5c3421fe2c8d // indirect - github.com/smartcontractkit/chainlink-protos/chainlink-ccv/message-rules v0.0.0-20260505131349-78e491b80735 // indirect - github.com/smartcontractkit/chainlink-protos/chainlink-ccv/verifier v0.0.0-20251211142334-5c3421fe2c8d // indirect - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260714170805-29c5577b5f55 // indirect - github.com/smartcontractkit/chainlink-protos/data-feeds v0.1.1-0.20260501174546-2e8846986b36 // indirect - github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-20260512230622-65f10f4cd305 // indirect - github.com/smartcontractkit/chainlink-protos/metering/go v0.0.0-20260710151514-27b5a126dabe // indirect - github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260709145319-7782fb89eb16 // indirect - github.com/smartcontractkit/chainlink-protos/orchestrator v0.11.0 // indirect - github.com/smartcontractkit/chainlink-protos/ring/go v0.0.0-20260331131315-f08a616d8dcd // indirect - github.com/smartcontractkit/chainlink-protos/storage-service v0.3.0 // indirect - github.com/smartcontractkit/chainlink-protos/svr v1.3.0 // indirect - github.com/smartcontractkit/chainlink-sui/codec v0.0.0-20260720132736-e99278bfdc96 // indirect - github.com/smartcontractkit/chainlink-ton/cciplib v0.1.1-0.20260716214810-db5ecc877490 // indirect - github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20260408092456-3c6369888d4a // indirect - github.com/smartcontractkit/freeport v0.1.3-0.20250828155247-add56fa28aad // indirect - github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 // indirect - github.com/smartcontractkit/libocr v0.0.0-20260810200708-618b5bf7f342 // indirect - github.com/smartcontractkit/smdkg v0.0.0-20251029093710-c38905e58aeb // indirect - github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20260626090144-2343efd61516 // indirect - github.com/smartcontractkit/tdh2/go/tdh2 v0.0.0-20251120172354-e8ec0386b06c // indirect - github.com/smartcontractkit/wsrpc v0.8.5-0.20250502134807-c57d3d995945 // indirect - github.com/spf13/cast v1.10.0 // indirect - github.com/spf13/cobra v1.10.2 // indirect - github.com/spf13/pflag v1.0.10 // indirect - github.com/stellar/go-stellar-sdk v0.5.0 // indirect - github.com/stellar/go-xdr v0.0.0-20260423131911-a87d4d0789c3 // indirect - github.com/stephenlacy/go-ethereum-hdwallet v0.0.0-20230913225845-a4fa94429863 // indirect - github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091 // indirect - github.com/stretchr/objx v0.5.3 // indirect - github.com/supranational/blst v0.3.16 // indirect - github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect - github.com/tendermint/go-amino v0.16.0 // indirect - github.com/theodesp/go-heaps v0.0.0-20190520121037-88e35354fe0a // indirect - github.com/tidwall/gjson v1.18.0 // indirect - github.com/tidwall/match v1.2.0 // indirect - github.com/tidwall/pretty v1.2.1 // indirect - github.com/tklauser/go-sysconf v0.4.0 // indirect - github.com/tklauser/numcpus v0.12.0 // indirect - github.com/twitchyliquid64/golang-asm v0.15.1 // indirect - github.com/tyler-smith/go-bip39 v1.1.0 // indirect - github.com/ugorji/go/codec v1.2.12 // indirect - github.com/ulule/limiter/v3 v3.11.2 // indirect - github.com/unrolled/secure v1.13.0 // indirect - github.com/urfave/cli v1.22.14 // indirect - github.com/urfave/cli/v2 v2.27.7 // indirect - github.com/wlynxg/anet v0.0.5 // indirect - github.com/x448/float16 v0.8.4 // indirect - github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect - github.com/xssnick/tonutils-go v1.14.1 // indirect - github.com/yusufpapurcu/wmi v1.2.4 // indirect - github.com/zeebo/xxh3 v1.1.0 // indirect - github.com/zksync-sdk/zksync2-go v1.1.1-0.20250620124214-2c742ee399c6 // indirect - github.com/zondax/hid v0.9.2 // indirect - github.com/zondax/ledger-go v0.14.3 // indirect - go.dedis.ch/fixbuf v1.0.3 // indirect - go.dedis.ch/kyber/v3 v3.1.0 // indirect - go.etcd.io/bbolt v1.4.2 // indirect - go.mongodb.org/mongo-driver v1.17.9 // indirect - go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/contrib/bridges/prometheus v0.68.0 // indirect - go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin v0.49.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 // indirect - go.opentelemetry.io/otel v1.44.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.19.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.20.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.43.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.43.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.19.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.43.0 // indirect - go.opentelemetry.io/otel/log v0.20.0 // indirect - go.opentelemetry.io/otel/metric v1.44.0 // indirect - go.opentelemetry.io/otel/sdk v1.44.0 // indirect - go.opentelemetry.io/otel/sdk/log v0.20.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.44.0 // indirect - go.opentelemetry.io/otel/trace v1.44.0 // indirect - go.opentelemetry.io/proto/otlp v1.10.0 // indirect - go.uber.org/goleak v1.3.0 // indirect - go.uber.org/multierr v1.11.0 // indirect - go.uber.org/ratelimit v0.3.1 // indirect - go.yaml.in/yaml/v2 v2.4.4 // indirect - go.yaml.in/yaml/v3 v3.0.4 // indirect - go.yaml.in/yaml/v4 v4.0.0-rc.4 // indirect - golang.org/x/arch v0.11.0 // indirect - golang.org/x/crypto v0.54.0 // indirect - golang.org/x/exp v0.0.0-20260508232706-74f9aab9d74a // indirect - golang.org/x/mod v0.37.0 // indirect - golang.org/x/net v0.57.0 // indirect - golang.org/x/oauth2 v0.36.0 // indirect - golang.org/x/sync v0.22.0 // indirect - golang.org/x/sys v0.47.0 // indirect - golang.org/x/term v0.45.0 // indirect - golang.org/x/text v0.40.0 // indirect - golang.org/x/time v0.15.0 // indirect - golang.org/x/tools v0.47.0 // indirect - gonum.org/v1/gonum v0.17.0 // indirect - google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa // indirect - google.golang.org/grpc v1.82.1 // indirect - gopkg.in/guregu/null.v4 v4.0.0 // indirect - gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect - gotest.tools/v3 v3.5.2 // indirect - pgregory.net/rapid v1.2.0 // indirect - sigs.k8s.io/yaml v1.6.0 // indirect - stathat.com/c/consistent v1.0.0 // indirect -) - -tool github.com/smartcontractkit/chainlink/v2/core/store/cmd/preparetest diff --git a/integration_tests/go.sum b/integration_tests/go.sum deleted file mode 100644 index b68108907..000000000 --- a/integration_tests/go.sum +++ /dev/null @@ -1,2016 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cosmossdk.io/api v0.7.6 h1:PC20PcXy1xYKH2KU4RMurVoFjjKkCgYRbVAD4PdqUuY= -cosmossdk.io/api v0.7.6/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= -cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= -cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= -cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo= -cosmossdk.io/core v0.11.0/go.mod h1:LaTtayWBSoacF5xNzoF8tmLhehqlA9z1SWiPuNC6X1w= -cosmossdk.io/depinject v1.1.0 h1:wLan7LG35VM7Yo6ov0jId3RHWCGRhe8E8bsuARorl5E= -cosmossdk.io/depinject v1.1.0/go.mod h1:kkI5H9jCGHeKeYWXTqYdruogYrEeWvBQCw1Pj4/eCFI= -cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= -cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= -cosmossdk.io/log v1.4.1 h1:wKdjfDRbDyZRuWa8M+9nuvpVYxrEOwbD/CA8hvhU8QM= -cosmossdk.io/log v1.4.1/go.mod h1:k08v0Pyq+gCP6phvdI6RCGhLf/r425UT6Rk/m+o74rU= -cosmossdk.io/math v1.4.0 h1:XbgExXFnXmF/CccPPEto40gOO7FpWu9yWNAZPN3nkNQ= -cosmossdk.io/math v1.4.0/go.mod h1:O5PkD4apz2jZs4zqFdTr16e1dcaQCc5z6lkEnrrppuk= -cosmossdk.io/store v1.1.1 h1:NA3PioJtWDVU7cHHeyvdva5J/ggyLDkyH0hGHl2804Y= -cosmossdk.io/store v1.1.1/go.mod h1:8DwVTz83/2PSI366FERGbWSH7hL6sB7HbYp8bqksNwM= -cosmossdk.io/x/tx v0.13.7 h1:8WSk6B/OHJLYjiZeMKhq7DK7lHDMyK0UfDbBMxVmeOI= -cosmossdk.io/x/tx v0.13.7/go.mod h1:V6DImnwJMTq5qFjeGWpXNiT/fjgE4HtmclRmTqRVM3w= -dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= -dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/bigmod v0.1.0 h1:UNzDk7y9ADKST+axd9skUpBQeW7fG2KrTZyOE4uGQy8= -filippo.io/bigmod v0.1.0/go.mod h1:OjOXDNlClLblvXdwgFFOQFJEocLhhtai8vGLy0JCZlI= -filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= -filippo.io/edwards25519 v1.1.1 h1:YpjwWWlNmGIDyXOn8zLzqiD+9TyIlPhGFG96P39uBpw= -filippo.io/edwards25519 v1.1.1/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= -filippo.io/nistec v0.0.4 h1:F14ZHT5htWlMnQVPndX9ro9arf56cBhQxq4LnDI491s= -filippo.io/nistec v0.0.4/go.mod h1:PK/lw8I1gQT4hUML4QGaqljwdDaFcMyFKSXN7kjrtKI= -github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= -github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= -github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= -github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= -github.com/AlekSi/pointer v1.1.0 h1:SSDMPcXD9jSl8FPy9cRzoRaMJtm9g9ggGTxecRUbQoI= -github.com/AlekSi/pointer v1.1.0/go.mod h1:y7BvfRI3wXPWKXEBhU71nbnIEEZX0QTSB2Bj48UJIZE= -github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg= -github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU= -github.com/Azure/go-ntlmssp v0.1.1 h1:l+FM/EEMb0U9QZE7mKNEDw5Mu3mFiaa2GKOoTSsNDPw= -github.com/Azure/go-ntlmssp v0.1.1/go.mod h1:NYqdhxd/8aAct/s4qSYZEerdPuH1liG2/X9DiVTbhpk= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk= -github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= -github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/zstd v1.5.7 h1:ybO8RBeh29qrxIhCA9E8gKY6xfONU9T6G6aP9DTKfLE= -github.com/DataDog/zstd v1.5.7/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/Depado/ginprom v1.8.0 h1:zaaibRLNI1dMiiuj1MKzatm8qrcHzikMlCc1anqOdyo= -github.com/Depado/ginprom v1.8.0/go.mod h1:XBaKzeNBqPF4vxJpNLincSQZeMDnZp1tIbU0FU0UKgg= -github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Masterminds/semver/v3 v3.5.0 h1:kQceYJfbupGfZOKZQg0kou0DgAKhzDg2NZPAwZ/2OOE= -github.com/Masterminds/semver/v3 v3.5.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= -github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= -github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= -github.com/NethermindEth/juno v0.15.11 h1:v8nVO6ccvNx4eNmI6b6cKfGmRiucx0Y7QpgYJks6gz0= -github.com/NethermindEth/juno v0.15.11/go.mod h1:DyfDC1vz8OpoAOWdGJif97Kueo4J7yhZUtYkkFUYg20= -github.com/NethermindEth/starknet.go v0.17.1 h1:VmB81n2GX8m+bFisXVCF5Z6k+uHpDglyNkUCqTVqAJo= -github.com/NethermindEth/starknet.go v0.17.1/go.mod h1:72WzcIncBwvAUANawfRtKRR+6nUrc9eYMYs6QEbbh1Y= -github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20260416073033-7c2071eaa8d4 h1:/97whAzwYxMNHXeTfhAtCRzNCpyblmxCtSYpsfzCszM= -github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20260416073033-7c2071eaa8d4/go.mod h1:ioLG6R+5bUSO1oeGSDxOV3FADARuMoytZCSX6MEMQkI= -github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMzGrKSKYe4AqU6PDYYpjk= -github.com/VictoriaMetrics/fastcache v1.13.0 h1:AW4mheMR5Vd9FkAPUv+NH6Nhw+fmbTMGMsNAoA/+4G0= -github.com/VictoriaMetrics/fastcache v1.13.0/go.mod h1:hHXhl4DA2fTL2HTZDJFXWgW0LNjo6B+4aj2Wmng3TjU= -github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= -github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/XSAM/otelsql v0.42.0 h1:Li0xF4eJUxG2e0x3D4rvRlys1f27yJKvjTh7ljkUP5o= -github.com/XSAM/otelsql v0.42.0/go.mod h1:4mOrEv+cS1KmKzrvTktvJnstr5GtKSAK+QHvFR9OcpI= -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= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alexbrainman/sspi v0.0.0-20210105120005-909beea2cc74 h1:Kk6a4nehpJ3UuJRqlA3JxYxBZEqCeOmATOvrbT4p9RA= -github.com/alexbrainman/sspi v0.0.0-20210105120005-909beea2cc74/go.mod h1:cEWa1LVoE5KvSD9ONXsZrj0z6KqySlCCNKHlLzbqAt4= -github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= -github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/andybalholm/brotli v1.2.1 h1:R+f5xP285VArJDRgowrfb9DqL18yVK0gKAW/F+eTWro= -github.com/andybalholm/brotli v1.2.1/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apache/arrow-go/v18 v18.6.0 h1:GX/Jyd3R7mCLiECAwY9FWbbaYblie2WXBSz4Sw8fNpM= -github.com/apache/arrow-go/v18 v18.6.0/go.mod h1:gm3MiPpY82fLYK5VKPB3WoJbsiLVDfT7flD5/vHReKw= -github.com/apache/thrift v0.22.0 h1:r7mTJdj51TMDe6RtcmNdQxgn9XcyfGDOzegMDRg47uc= -github.com/apache/thrift v0.22.0/go.mod h1:1e7J/O1Ae6ZQMTYdy9xa3w9k+XHWPfRvdPyJeynQ+/g= -github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7Dml6nw9rQ= -github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk= -github.com/appleboy/gofight/v2 v2.1.2 h1:VOy3jow4vIK8BRQJoC/I9muxyYlJ2yb9ht2hZoS3rf4= -github.com/appleboy/gofight/v2 v2.1.2/go.mod h1:frW+U1QZEdDgixycTj4CygQ48yLTUhplt43+Wczp3rw= -github.com/aptos-labs/aptos-go-sdk v1.13.0 h1:epv7K/tIbAEO2RfogwGacICBig8rrigJj24fDsy6KTg= -github.com/aptos-labs/aptos-go-sdk v1.13.0/go.mod h1:FTgKp0RLfEefllCdkCj0jPU14xWk11yA7SFVfCDLUj8= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/atombender/go-jsonschema v0.16.1-0.20240916205339-a74cd4e2851c h1:cxQVoh6kY+c4b0HUchHjGWBI8288VhH50qxKG3hdEg0= -github.com/atombender/go-jsonschema v0.16.1-0.20240916205339-a74cd4e2851c/go.mod h1:3XzxudkrYVUvbduN/uI2fl4lSrMSzU0+3RCu2mpnfx8= -github.com/avast/retry-go/v4 v4.7.0 h1:yjDs35SlGvKwRNSykujfjdMxMhMQQM0TnIjJaHB+Zio= -github.com/avast/retry-go/v4 v4.7.0/go.mod h1:ZMPDa3sY2bKgpLtap9JRUgk2yTAba7cgiFhqxY2Sg6Q= -github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk= -github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg= -github.com/beevik/ntp v1.5.0 h1:y+uj/JjNwlY2JahivxYvtmv4ehfi3h74fAuABB9ZSM4= -github.com/beevik/ntp v1.5.0/go.mod h1:mJEhBrwT76w9D+IfOEGvuzyuudiW9E52U2BaTrMOYow= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o= -github.com/benbjohnson/clock v1.3.5/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s= -github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bits-and-blooms/bitset v1.24.4 h1:95H15Og1clikBrKr/DuzMXkQzECs1M6hhoGXLwLQOZE= -github.com/bits-and-blooms/bitset v1.24.4/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= -github.com/blendle/zapdriver v1.3.1 h1:C3dydBOWYRiOk+B8X9IVZ5IOe+7cl+tGOexN4QqHfpE= -github.com/blendle/zapdriver v1.3.1/go.mod h1:mdXfREi6u5MArG4j9fewC+FGnXaBR+T4Ox4J2u4eHCc= -github.com/block-vision/sui-go-sdk v1.2.1 h1:uwvGbzfcrS4SsIaakclYxy0qgEF1XWIUtTYWXB4PoAw= -github.com/block-vision/sui-go-sdk v1.2.1/go.mod h1:t8mWASwfyv+EyqHGO9ZrcDiCJWGOFEXqq50TMJ8GQco= -github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= -github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd/go.mod h1:nm3Bko6zh6bWP60UxwoT5LzdGJsQJaPo6HjduXq9p6A= -github.com/btcsuite/btcd v0.24.2 h1:aLmxPguqxza+4ag8R1I2nnJjSu2iFn/kqtHTIImswcY= -github.com/btcsuite/btcd v0.24.2/go.mod h1:5C8ChTkl5ejr3WHj8tkQSCmydiMEPB0ZhQhehpq7Dgg= -github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA= -github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= -github.com/btcsuite/btcd/btcec/v2 v2.3.4 h1:3EJjcN70HCu/mwqlUsGK8GcNVyLVxFDlWurTXGPFfiQ= -github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= -github.com/btcsuite/btcd/btcutil v1.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A= -github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUBTwmWH/0Jn8VHE= -github.com/btcsuite/btcd/btcutil v1.1.5/go.mod h1:PSZZ4UitpLBWzxGd5VGOrLnmOjtPP/a6HaFo12zMs00= -github.com/btcsuite/btcd/btcutil v1.1.6 h1:zFL2+c3Lb9gEgqKNzowKUPQNb8jV7v5Oaodi/AYFd6c= -github.com/btcsuite/btcd/btcutil v1.1.6/go.mod h1:9dFymx8HpuLqBnsPELrImQeTQfKBQqzqGbbV3jK55aE= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6sjybR934QNHSJZPTQ= -github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/bufbuild/protocompile v0.14.1 h1:iA73zAf/fyljNjQKwYzUHD6AD4R8KMasmwa/FBatYVw= -github.com/bufbuild/protocompile v0.14.1/go.mod h1:ppVdAIhbr2H8asPk6k4pY7t9zB1OU5DoEw9xY/FUi1c= -github.com/buger/jsonparser v1.2.0 h1:4EFcvK1kD4jyj6YqNK6skK6w+y7FHHBR+XBCtxwu/6g= -github.com/buger/jsonparser v1.2.0/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= -github.com/buraksezer/consistent v0.10.0 h1:hqBgz1PvNLC5rkWcEBVAL9dFMBWz6I0VgUCW25rrZlU= -github.com/buraksezer/consistent v0.10.0/go.mod h1:6BrVajWq7wbKZlTOUPs/XVfR8c0maujuPowduSpZqmw= -github.com/bytecodealliance/wasmtime-go/v47 v47.0.0 h1:PAe4o7Mq1VjSx81Dc+V4w1XvxLouFTB384N4ZT4o+7k= -github.com/bytecodealliance/wasmtime-go/v47 v47.0.0/go.mod h1:icJLhTDV7EyKlZpeuBuJl4yoTMqhjUvNv1mewMJUvr4= -github.com/bytedance/sonic v1.12.3 h1:W2MGa7RCU1QTeYRTPE3+88mVC0yXmsRQRChiyVocVjU= -github.com/bytedance/sonic v1.12.3/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= -github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= -github.com/bytedance/sonic/loader v0.2.0 h1:zNprn+lsIP06C/IqCHs3gPQIvnvpKbbxyXQP1iU4kWM= -github.com/bytedance/sonic/loader v0.2.0/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= -github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= -github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= -github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= -github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= -github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/cp v1.1.1 h1:nCb6ZLdB7NRaqsm91JtQTAme2SKJzXVsdPIPkyJr1MU= -github.com/cespare/cp v1.1.1/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= -github.com/cespare/xxhash/v2 v2.1.1/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/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= -github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/clipperhouse/uax29/v2 v2.7.0 h1:+gs4oBZ2gPfVrKPthwbMzWZDaAFPGYK72F0NJv2v7Vk= -github.com/clipperhouse/uax29/v2 v2.7.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM= -github.com/cloudevents/sdk-go/binding/format/protobuf/v2 v2.16.2 h1:ydUjnKn4RoCeN8rge3F/deT52w2WJMmIC5mHNUq+Ut8= -github.com/cloudevents/sdk-go/binding/format/protobuf/v2 v2.16.2/go.mod h1:Bny999RuVUtNjzTGa9HCHpXjrLGMipJVq5kqVpudBl0= -github.com/cloudevents/sdk-go/v2 v2.16.2 h1:ZYDFrYke4FD+jM8TZTJJO6JhKHzOQl2oqpFK1D+NnQM= -github.com/cloudevents/sdk-go/v2 v2.16.2/go.mod h1:laOcGImm4nVJEU+PHnUrKL56CKmRL65RlQF0kRmW/kg= -github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= -github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= -github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= -github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= -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.12.0 h1:d7oCs6vuIMUQRVbi6jWWWEJZahLCfJpnJSVobd1/sUo= -github.com/cockroachdb/errors v1.12.0/go.mod h1:SvzfYNNBshAVbZ8wzNc/UPK3w1vf0dKDUP41ucAIf7g= -github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0 h1:pU88SPhIFid6/k0egdR5V6eALQYq2qbSmukrkgIh/0A= -github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0/go.mod h1:9/y3cnZ5GKakj/H4y9r9GTjCvAFta7KLgSHPJJYc52M= -github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 h1:ASDL+UJcILMqgNeV5jiqR4j+sTuvQNHdf2chuKj1M5k= -github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506/go.mod h1:Mw7HqKr2kdtu6aYGn3tPmAftiP3QPX63LdK/zcariIo= -github.com/cockroachdb/pebble v1.1.5 h1:5AAWCBWbat0uE0blr8qzufZP5tBjkRyy/jWe1QWLnvw= -github.com/cockroachdb/pebble v1.1.5/go.mod h1:17wO9el1YEigxkP/YtV8NtCivQDgoCyBg5c4VR/eOWo= -github.com/cockroachdb/redact v1.1.6 h1:zXJBwDZ84xJNlHl1rMyCojqyIxv+7YUpQiJLQ7n4314= -github.com/cockroachdb/redact v1.1.6/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/cockroachdb/tokenbucket v0.0.0-20250429170803-42689b6311bb h1:3bCgBvB8PbJVMX1ouCcSIxvsqKPYM7gs72o0zC76n9g= -github.com/cockroachdb/tokenbucket v0.0.0-20250429170803-42689b6311bb/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/coder/websocket v1.8.14 h1:9L0p0iKiNOibykf283eHkKUHHrpG7f65OE3BhhO7v9g= -github.com/coder/websocket v1.8.14/go.mod h1:NX3SzP+inril6yawo5CQXx8+fk145lPDC6pumgx0mVg= -github.com/cometbft/cometbft v0.38.21 h1:qcIJSH9LiwU5s6ZgKR5eRbsLNucbubfraDs5bzgjtOI= -github.com/cometbft/cometbft v0.38.21/go.mod h1:UCu8dlHqvkAsmAFmWDRWNZJPlu6ya2fTWZlDrWsivwo= -github.com/cometbft/cometbft-db v1.0.1 h1:SylKuLseMLQKw3+i8y8KozZyJcQSL98qEe2CGMCGTYE= -github.com/cometbft/cometbft-db v1.0.1/go.mod h1:EBrFs1GDRiTqrWXYi4v90Awf/gcdD5ExzdPbg4X8+mk= -github.com/consensys/gnark-crypto v0.20.1 h1:PXDUBvk8AzhvWowHLWBEAfUQcV1/aZgWIqD6eMpXmDg= -github.com/consensys/gnark-crypto v0.20.1/go.mod h1:RBWrSgy+IDbGR69RRV313th3M/aZU1ubk2om+qHuTSc= -github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= -github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= -github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= -github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= -github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= -github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= -github.com/containerd/platforms v1.0.0-rc.2 h1:0SPgaNZPVWGEi4grZdV8VRYQn78y+nm6acgLGv/QzE4= -github.com/containerd/platforms v1.0.0-rc.2/go.mod h1:J71L7B+aiM5SdIEqmd9wp6THLVRzJGXfNuWCZCllLA4= -github.com/coreos/go-oidc/v3 v3.11.0 h1:Ia3MxdwpSw702YW0xgfmP1GVCMA9aEFWu12XUZ3/OtI= -github.com/coreos/go-oidc/v3 v3.11.0/go.mod h1:gE3LgjOgFoHi9a4ce4/tJczr0Ai2/BoDhf0r5lltWI0= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= -github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= -github.com/cosmos/cosmos-db v1.1.1 h1:FezFSU37AlBC8S98NlSagL76oqBRWq/prTPvFcEJNCM= -github.com/cosmos/cosmos-db v1.1.1/go.mod h1:AghjcIPqdhSLP/2Z0yha5xPH3nLnskz81pBx3tcVSAw= -github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= -github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= -github.com/cosmos/cosmos-sdk v0.50.14 h1:G8CtGHFWbExa+ZpVOVAb4kFmko/R30igsYOwyzRMtgY= -github.com/cosmos/cosmos-sdk v0.50.14/go.mod h1:hrWEFMU1eoXqLJeE6VVESpJDQH67FS1nnMrQIjO2daw= -github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= -github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= -github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= -github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= -github.com/cosmos/gogoproto v1.7.0 h1:79USr0oyXAbxg3rspGh/m4SWNyoz/GLaAh0QlCe2fro= -github.com/cosmos/gogoproto v1.7.0/go.mod h1:yWChEv5IUEYURQasfyBW5ffkMHR/90hiHgbNgrtp4j0= -github.com/cosmos/iavl v1.2.2 h1:qHhKW3I70w+04g5KdsdVSHRbFLgt3yY3qTMd4Xa4rC8= -github.com/cosmos/iavl v1.2.2/go.mod h1:GiM43q0pB+uG53mLxLDzimxM9l/5N9UuSY3/D0huuVw= -github.com/cosmos/ics23/go v0.11.0 h1:jk5skjT0TqX5e5QJbEnwXIS2yI2vnmLOgpQPeM5RtnU= -github.com/cosmos/ics23/go v0.11.0/go.mod h1:A8OjxPE67hHST4Icw94hOxxFEJMBG031xIGF/JHNIY0= -github.com/cosmos/ledger-cosmos-go v0.14.0 h1:WfCHricT3rPbkPSVKRH+L4fQGKYHuGOK9Edpel8TYpE= -github.com/cosmos/ledger-cosmos-go v0.14.0/go.mod h1:E07xCWSBl3mTGofZ2QnL4cIUzMbbGVyik84QYKbX3RA= -github.com/cpuguy83/dockercfg v0.3.2 h1:DlJTyZGBDlXqUZ2Dk2Q3xHs/FtnooJJVaad2S9GKorA= -github.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc= -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.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= -github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo= -github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= -github.com/crate-crypto/go-eth-kzg v1.5.0 h1:FYRiJMJG2iv+2Dy3fi14SVGjcPteZ5HAAUe4YWlJygc= -github.com/crate-crypto/go-eth-kzg v1.5.0/go.mod h1:J9/u5sWfznSObptgfa92Jq8rTswn6ahQWEuiLHOjCUI= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cucumber/gherkin/go/v26 v26.2.0 h1:EgIjePLWiPeslwIWmNQ3XHcypPsWAHoMCz/YEBKP4GI= -github.com/cucumber/gherkin/go/v26 v26.2.0/go.mod h1:t2GAPnB8maCT4lkHL99BDCVNzCh1d7dBhCLt150Nr/0= -github.com/cucumber/godog v0.15.1 h1:rb/6oHDdvVZKS66hrhpjFQFHjthFSrQBCOI1LwshNTI= -github.com/cucumber/godog v0.15.1/go.mod h1:qju+SQDewOljHuq9NSM66s0xEhogx0q30flfxL4WUk8= -github.com/cucumber/messages/go/v21 v21.0.1 h1:wzA0LxwjlWQYZd32VTlAVDTkW6inOFmSM+RuOwHZiMI= -github.com/cucumber/messages/go/v21 v21.0.1/go.mod h1:zheH/2HS9JLVFukdrsPWoPdmUtmYQAQPLk7w5vWsk5s= -github.com/danieljoos/wincred v1.2.1 h1:dl9cBrupW8+r5250DYkYxocLeZ1Y4vB1kxgtjxw8GQs= -github.com/danieljoos/wincred v1.2.1/go.mod h1:uGaFL9fDn3OLTvzCGulzE+SzjEe5NGlh5FdCcyfPwps= -github.com/danielkov/gin-helmet v0.0.0-20171108135313-1387e224435e h1:5jVSh2l/ho6ajWhSPNN84eHEdq3dp0T7+f6r3Tc6hsk= -github.com/danielkov/gin-helmet v0.0.0-20171108135313-1387e224435e/go.mod h1:IJgIiGUARc4aOr4bOQ85klmjsShkEEfiRc6q/yBSfo8= -github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -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/dchest/siphash v1.2.3 h1:QXwFc8cFOR2dSa/gE6o/HokBMWtLUaNDVd+22aKHeEA= -github.com/dchest/siphash v1.2.3/go.mod h1:0NvQU092bT0ipiFN++/rXm69QG9tVxLAlQHIXMPAkHc= -github.com/deckarep/golang-set/v2 v2.9.0 h1:prva4eP9UysWagLyKrtn074ughi0NnkIf0A4M5yOCKI= -github.com/deckarep/golang-set/v2 v2.9.0/go.mod h1:EWknQXbs0mcFpat2QOoXV0Ee57cD+w6ZEN76BR2JVrM= -github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= -github.com/decred/dcrd/crypto/blake256 v1.1.0 h1:zPMNGQCm0g4QTY27fOCorQW7EryeQ/U0x++OzVrdms8= -github.com/decred/dcrd/crypto/blake256 v1.1.0/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 h1:5RVFMOWjMyRy8cARdy79nAmgYw3hK/4HUq48LQ6Wwqo= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1/go.mod h1:ZXNYxsqcloTdSy/rNShjYzMhyjf0LaoftYK0p+A3h40= -github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= -github.com/deepmap/oapi-codegen v1.8.2 h1:SegyeYGcdi0jLLrpbCMoJxnUUn8GBXHsvr4rbzjuhfU= -github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= -github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= -github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= -github.com/dgraph-io/badger/v4 v4.7.0 h1:Q+J8HApYAY7UMpL8d9owqiB+odzEc0zn/aqOD9jhc6Y= -github.com/dgraph-io/badger/v4 v4.7.0/go.mod h1:He7TzG3YBy3j4f5baj5B7Zl2XyfNe5bl4Udl0aPemVA= -github.com/dgraph-io/ristretto/v2 v2.2.0 h1:bkY3XzJcXoMuELV8F+vS8kzNgicwQFAaGINAEJdWGOM= -github.com/dgraph-io/ristretto/v2 v2.2.0/go.mod h1:RZrm63UmcBAaYWC1DotLYBmTvgkrs0+XhBd7Npn7/zI= -github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da h1:aIftn67I1fkbMa512G+w+Pxci9hJPB8oMnkcP3iZF38= -github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= -github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/go-connections v0.7.0 h1:6SsRfJddP22WMrCkj19x9WKjEDTB+ahsdiGYf0mN39c= -github.com/docker/go-connections v0.7.0/go.mod h1:no1qkHdjq7kLMGUXYAduOhYPSJxxvgWBh7ogVvptn3Q= -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/dominikbraun/graph v0.23.0 h1:TdZB4pPqCLFxYhdyMFb1TBdFxp8XLcJfTTBQucVPgCo= -github.com/dominikbraun/graph v0.23.0/go.mod h1:yOjYyogZLY1LSG9E33JWZJiq5k83Qy2C6POAuiViluc= -github.com/doyensec/safeurl v0.2.5 h1:kKu0JNQy0tJ8jkDyB5h6Aml9vWWniq+mpoa12EGLcOQ= -github.com/doyensec/safeurl v0.2.5/go.mod h1:3H0cgRpPYPSpgxRRn5yGD35Ns/LgGX/BVWSBbzUqXtY= -github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= -github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/dvsekhvalnov/jose2go v1.7.0 h1:bnQc8+GMnidJZA8zc6lLEAb4xNrIqHwO+9TzqvtQZPo= -github.com/dvsekhvalnov/jose2go v1.7.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= -github.com/ebitengine/purego v0.10.0 h1:QIw4xfpWT6GWTzaW5XEKy3HXoqrJGx1ijYHzTF0/ISU= -github.com/ebitengine/purego v0.10.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= -github.com/emicklei/dot v1.6.2 h1:08GN+DD79cy/tzN6uLCT84+2Wk9u+wvqP+Hkx/dIR8A= -github.com/emicklei/dot v1.6.2/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/esote/minmaxheap v1.0.0 h1:rgA7StnXXpZG6qlM0S7pUmEv1KpWe32rYT4x8J8ntaA= -github.com/esote/minmaxheap v1.0.0/go.mod h1:Ln8+i7fS1k3PLgZI2JAo0iA1as95QnIYiGCrqSJ5FZk= -github.com/ethereum/c-kzg-4844/v2 v2.1.7 h1:aat3CuITdDbPC6pmEGRT0zJ5eOxzrZj8TJT5z7Xk//M= -github.com/ethereum/c-kzg-4844/v2 v2.1.7/go.mod h1:8HMkUZ5JRv4hpw/XUrYWSQNAUzhHMg2UDb/U+5m+XNw= -github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= -github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= -github.com/ethereum/go-ethereum v1.17.4 h1:uA4q+qiLp7QImBsjdRbINu8iX6OEVmj4DPc5/E5Fsxc= -github.com/ethereum/go-ethereum v1.17.4/go.mod h1:qMdgwqqRAen+aT8P7KKQKi0Qt6RzG4cfejVAbCpJgqA= -github.com/expr-lang/expr v1.17.8 h1:W1loDTT+0PQf5YteHSTpju2qfUfNoBt4yw9+wOEU9VM= -github.com/expr-lang/expr v1.17.8/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= -github.com/failsafe-go/failsafe-go v0.9.0 h1:w0g7iv48RpQvV3UH1VlgUnLx9frQfCwI7ljnJzqEhYg= -github.com/failsafe-go/failsafe-go v0.9.0/go.mod h1:sX5TZ4HrMLYSzErWeckIHRZWgZj9PbKMAEKOVLFWtfM= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/color v1.19.0 h1:Zp3PiM21/9Ld6FzSKyL5c/BULoe/ONr9KlbYVOfG8+w= -github.com/fatih/color v1.19.0/go.mod h1:zNk67I0ZUT1bEGsSGyCZYZNrHuTkJJB+r6Q9VuMi0LE= -github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= -github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/ferranbt/fastssz v0.1.4 h1:OCDB+dYDEQDvAgtAGnTSidK1Pe2tW3nFV40XyMkTeDY= -github.com/ferranbt/fastssz v0.1.4/go.mod h1:Ea3+oeoRGGLGm5shYAeDgu6PGUlcvQhE2fILyD9+tGg= -github.com/fjl/jsonw v0.1.0 h1:V3MyR79fjLpn/+bMgvegdGUIhoJOzjmqWcKDgcOmY1I= -github.com/fjl/jsonw v0.1.0/go.mod h1:2KMLevM6FXEJnfhtk7naXu9vZdVfOma1GlnGdPRlumU= -github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= -github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= -github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= -github.com/fsnotify/fsnotify v1.10.1 h1:b0/UzAf9yR5rhf3RPm9gf3ehBPpf0oZKIjtpKrx59Ho= -github.com/fsnotify/fsnotify v1.10.1/go.mod h1:TLheqan6HD6GBK6PrDWyDPBaEV8LspOxvPSjC+bVfgo= -github.com/fxamacker/cbor/v2 v2.9.2 h1:X4Ksno9+x3cz0TZv69ec1hxP/+tymuR8PXQJyDwfh78= -github.com/fxamacker/cbor/v2 v2.9.2/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= -github.com/gabriel-vasile/mimetype v1.4.13 h1:46nXokslUBsAJE/wMsp5gtO500a4F3Nkz9Ufpk2AcUM= -github.com/gabriel-vasile/mimetype v1.4.13/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= -github.com/gagliardetto/binary v0.8.0 h1:U9ahc45v9HW0d15LoN++vIXSJyqR/pWw8DDlhd7zvxg= -github.com/gagliardetto/binary v0.8.0/go.mod h1:2tfj51g5o9dnvsc+fL3Jxr22MuWzYXwx9wEoN0XQ7/c= -github.com/gagliardetto/gofuzz v1.2.2 h1:XL/8qDMzcgvR4+CyRQW9UGdwPRPMHVJfqQ/uMvSUuQw= -github.com/gagliardetto/gofuzz v1.2.2/go.mod h1:bkH/3hYLZrMLbfYWA0pWzXmi5TTRZnu4pMGZBkqMKvY= -github.com/gagliardetto/metaplex-go v0.2.1 h1:NMBsgJe3I2avKZ39dfYQvXsGsr2BxUgARkA9LZ6szBg= -github.com/gagliardetto/metaplex-go v0.2.1/go.mod h1:6ZLYBvlWcXktXQ/QcBJYRzKgK7Q3WgiGD7BjE7Zxpw4= -github.com/gagliardetto/solana-go v1.13.0 h1:uNzhjwdAdbq9xMaX2DF0MwXNMw6f8zdZ7JPBtkJG7Ig= -github.com/gagliardetto/solana-go v1.13.0/go.mod h1:l/qqqIN6qJJPtxW/G1PF4JtcE3Zg2vD2EliZrr9Gn5k= -github.com/gagliardetto/treeout v0.1.4 h1:ozeYerrLCmCubo1TcIjFiOWTTGteOOHND1twdFpgwaw= -github.com/gagliardetto/treeout v0.1.4/go.mod h1:loUefvXTrlRG5rYmJmExNryyBRh8f89VZhmMOyCyqok= -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/gedex/inflector v0.0.0-20170307190818-16278e9db813 h1:Uc+IZ7gYqAf/rSGFplbWBSHaGolEQlNLgMgSE3ccnIQ= -github.com/gedex/inflector v0.0.0-20170307190818-16278e9db813/go.mod h1:P+oSoE9yhSRvsmYyZsshflcR6ePWYLql6UU1amW13IM= -github.com/getsentry/sentry-go v0.35.1 h1:iopow6UVLE2aXu46xKVIs8Z9D/YZkJrHkgozrxa+tOQ= -github.com/getsentry/sentry-go v0.35.1/go.mod h1:C55omcY9ChRQIUcVcGcs+Zdy4ZpQGvNJ7JYHIoSWOtE= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/cors v1.7.2 h1:oLDHxdg8W/XDoN/8zamqk/Drgt4oVZDvaV0YmvVICQw= -github.com/gin-contrib/cors v1.7.2/go.mod h1:SUJVARKgQ40dmrzgXEVxj2m7Ig1v1qIboQkPDTQ9t2E= -github.com/gin-contrib/expvar v0.0.1 h1:IuU5ArEgihz50vG8Onrwz22kJr7Mcvgv9xSSpfU5g+w= -github.com/gin-contrib/expvar v0.0.1/go.mod h1:8o2CznfQi1JjktORdHr2/abg3wSV6OCnXh0yGypvvVw= -github.com/gin-contrib/sessions v0.0.5 h1:CATtfHmLMQrMNpJRgzjWXD7worTh7g7ritsQfmF+0jE= -github.com/gin-contrib/sessions v0.0.5/go.mod h1:vYAuaUPqie3WUSsft6HUlCjlwwoJQs97miaG2+7neKY= -github.com/gin-contrib/size v0.0.0-20230212012657-e14a14094dc4 h1:Z9J0PVIt1PuibOShaOw1jH8hUYz+Ak8NLsR/GI0Hv5I= -github.com/gin-contrib/size v0.0.0-20230212012657-e14a14094dc4/go.mod h1:CEPcgZiz8998l9E8fDm16h8UfHRL7b+5oG0j/0koeVw= -github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= -github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= -github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= -github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= -github.com/gin-gonic/gin v1.10.1 h1:T0ujvqyCSqRopADpgPgiTT63DUQVSfojyME59Ei63pQ= -github.com/gin-gonic/gin v1.10.1/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= -github.com/go-asn1-ber/asn1-ber v1.5.5 h1:MNHlNMBDgEKD4TcKr36vQN68BA00aDfjIt3/bD50WnA= -github.com/go-asn1-ber/asn1-ber v1.5.5/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= -github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk= -github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= -github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= -github.com/go-json-experiment/json v0.0.0-20260505212615-e40f80bf6836 h1:5KGUhXZFTN1PrCY4zUZLe1J8n7uBNmPDbCLCn78EbPQ= -github.com/go-json-experiment/json v0.0.0-20260505212615-e40f80bf6836/go.mod h1:tphK2c80bpPhMOI4v6bIc2xWywPfbqi1Z06+RcrMkDg= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.13.0 h1:OoneCcHKHQ03LfBpoQCUfCluwd2Vt3ohz+kvbJneZAU= -github.com/go-kit/kit v0.13.0/go.mod h1:phqEHMMUbyrCFCTgH48JueqrM3md2HcAZ8N3XE4FKDg= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= -github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-ldap/ldap/v3 v3.4.6 h1:ert95MdbiG7aWo/oPYp9btL3KJlMPKnP58r09rI8T+A= -github.com/go-ldap/ldap/v3 v3.4.6/go.mod h1:IGMQANNtxpsOzj7uUAMjpGBaOVTC4DYyIy8VsTdxmtc= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= -github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= -github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= -github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= -github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= -github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= -github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= -github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= -github.com/go-playground/validator/v10 v10.30.3 h1:4MU6YkEwx7GbcPJOZxrtbu+QfF3pJLJuaYTeAH0DYy8= -github.com/go-playground/validator/v10 v10.30.3/go.mod h1:4Axh7oCNGcoGkqLoE4YWt6n20mcEIsPRlB7vPk3lpyc= -github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= -github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo= -github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= -github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= -github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro= -github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= -github.com/go-webauthn/webauthn v0.9.4 h1:YxvHSqgUyc5AK2pZbqkWWR55qKeDPhP8zLDr6lpIc2g= -github.com/go-webauthn/webauthn v0.9.4/go.mod h1:LqupCtzSef38FcxzaklmOn7AykGKhAhr9xlRbdbgnTw= -github.com/go-webauthn/x v0.1.5 h1:V2TCzDU2TGLd0kSZOXdrqDVV5JB9ILnKxA9S53CSBw0= -github.com/go-webauthn/x v0.1.5/go.mod h1:qbzWwcFcv4rTwtCLOZd+icnr6B7oSsAGZJqlt8cukqY= -github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/goccy/go-json v0.10.6 h1:p8HrPJzOakx/mn/bQtjgNjdTcN+/S6FcG2CTtQOrHVU= -github.com/goccy/go-json v0.10.6/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= -github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM= -github.com/goccy/go-yaml v1.19.2/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= -github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= -github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E= -github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0= -github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= -github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= -github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI= -github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= -github.com/golang-jwt/jwt/v5 v5.3.1 h1:kYf81DTWFe7t+1VvL7eS+jKFVWaUnK9cB1qbwn63YCY= -github.com/golang-jwt/jwt/v5 v5.3.1/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.7.0-rc.1 h1:YojYx61/OLFsiv6Rw1Z96LpldJIy31o+UHmwAUMJ6/U= -github.com/golang/mock v1.7.0-rc.1/go.mod h1:s42URUywIqd+OcERslBJvOjepvNymP31m3q8d/GkuRs= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2/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.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= -github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= -github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/flatbuffers v25.12.19+incompatible h1:haMV2JRRJCe1998HeW/p0X9UaMTK6SDo0ffLn2+DbLs= -github.com/google/flatbuffers v25.12.19+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= -github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/go-tpm v0.9.0 h1:sQF6YqWMi+SCXpsmS3fd21oPy/vSddwZry4JnmltHVk= -github.com/google/go-tpm v0.9.0/go.mod h1:FkNVkc6C+IsvDI9Jw1OveJmxGZUUaKxtrpOS47QWKfU= -github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= -github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= -github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20260302011040-a15ffb7f9dcc h1:VBbFa1lDYWEeV5FZKUiYKYT0VxCp9twUmmaq9eb8sXw= -github.com/google/pprof v0.0.0-20260302011040-a15ffb7f9dcc/go.mod h1:MxpfABSjhmINe3F1It9d+8exIHFvUqtLIRCdOGNXqiI= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k= -github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= -github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w= -github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= -github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= -github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kXD8ePA= -github.com/gorilla/securecookie v1.1.2/go.mod h1:NfCASbcHqRSY+3a8tlWJwsQap2VX5pwzwo4h3eOamfo= -github.com/gorilla/sessions v1.2.2 h1:lqzMYz6bOfvn2WriPUjNByzeXIlVzURcPmgMczkmTjY= -github.com/gorilla/sessions v1.2.2/go.mod h1:ePLdVu+jbEgHH+KWw8I1z2wqd0BAdAQh/8LRvBeoNcQ= -github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 h1:JeSE6pjso5THxAzdVpqr6/geYxZytqFMBCOtn/ujyeo= -github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674/go.mod h1:r4w70xmWCQKmi1ONH4KIaBptdivuRPyosB9RmPlGEwA= -github.com/grafana/otel-profiling-go v0.5.1 h1:stVPKAFZSa7eGiqbYuG25VcqYksR6iWvF3YH66t4qL8= -github.com/grafana/otel-profiling-go v0.5.1/go.mod h1:ftN/t5A/4gQI19/8MoWurBEtC6gFw8Dns1sJZ9W4Tls= -github.com/grafana/pyroscope-go v1.3.0 h1:t3Jehad8vvqN4oRAB0LdmfQ5ZSUXQw3asoft+K4GAT8= -github.com/grafana/pyroscope-go v1.3.0/go.mod h1:XA7I3usNx+UdjOZfQnl1WV8y924vsJo9KIVrKB+9jx4= -github.com/grafana/pyroscope-go/godeltaprof v0.1.10 h1:dvhndEbyavTb59vFCd6PsrAG5qi69/qZZtegh/TJKSY= -github.com/grafana/pyroscope-go/godeltaprof v0.1.10/go.mod h1:XnWRGg2XO5uxZdiz1rfeJH6w1eZ+YICCBVXNWOfH86g= -github.com/grafana/regexp v0.0.0-20250905093917-f7b3be9d1853 h1:cLN4IBkmkYZNnk7EAJ0BHIethd+J6LqxFNw5mSiI2bM= -github.com/grafana/regexp v0.0.0-20250905093917-f7b3be9d1853/go.mod h1:+JKpmjMGhpgPL+rXZ5nsZieVzvarn86asRlBg4uNGnk= -github.com/graph-gophers/dataloader v5.0.0+incompatible h1:R+yjsbrNq1Mo3aPG+Z/EKYrXrXXUNJHOgbRt+U6jOug= -github.com/graph-gophers/dataloader v5.0.0+incompatible/go.mod h1:jk4jk0c5ZISbKaMe8WsVopGB5/15GvGHMdMdPtwlRp4= -github.com/graph-gophers/graphql-go v1.5.0 h1:fDqblo50TEpD0LY7RXk/LFVYEVqo3+tXMNMPSVXA1yc= -github.com/graph-gophers/graphql-go v1.5.0/go.mod h1:YtmJZDLbF1YYNrlNAuiO5zAStUWc3XZT07iGsVqe1Os= -github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= -github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= -github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.1.0 h1:QGLs/O40yoNK9vmy4rhUGBVyMf1lISBGtXRpsu/Qu/o= -github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.1.0/go.mod h1:hM2alZsMUni80N33RBe6J0e423LB+odMj7d3EMP9l20= -github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.3 h1:B+8ClL/kCQkRiU82d9xajRPKYMrB7E0MbtzWVi1K4ns= -github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.3/go.mod h1:NbCUVmiS4foBGBHOYlCT25+YmGpJ32dZPi75pGEUpj4= -github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 h1:5VipnvEpbqr2gA2VbM+nYVbkIF28c5ZQfqCBQ5g2xfk= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0/go.mod h1:Hyl3n6Twe1hvtd9XUXDec4pTvgMSEixRuQKPTMH2bNs= -github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= -github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= -github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= -github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= -github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-envparse v0.1.0 h1:bE++6bhIsNCPLvgDZkYqo3nA+/PFI51pkrHdmPSDFPY= -github.com/hashicorp/go-envparse v0.1.0/go.mod h1:OHheN1GoygLlAkTlXLXvAdnXdZxy8JUweQ1rAXx1xnc= -github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= -github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= -github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-memdb v1.3.5 h1:b3taDMxCBCBVgyRrS1AZVHO14ubMYZB++QpNhBg+Nyo= -github.com/hashicorp/go-memdb v1.3.5/go.mod h1:8IVKKBkVe+fxFgdFOYxzQQNjz+sWCyHCdIC/+5+Vy1Y= -github.com/hashicorp/go-metrics v0.5.4 h1:8mmPiIJkTPPEbAiV97IxdAGNdRdaWwVap1BU6elejKY= -github.com/hashicorp/go-metrics v0.5.4/go.mod h1:CG5yz4NZ/AI/aQt9Ucm/vdBnbh7fvmv4lxZ350i+QQI= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-plugin v1.8.0 h1:ie8S6RRY8RvB2usYZv+AAZ/wBvx2AU5p5QeP5j/FORs= -github.com/hashicorp/go-plugin v1.8.0/go.mod h1:BExt6KEaIYx804z8k4gRzRLEvxKVb+kn0NMcihqOqb8= -github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-retryablehttp v0.7.8 h1:ylXZWnqa7Lhqpk0L1P1LzDtGcCR0rPVUrx/c8Unxc48= -github.com/hashicorp/go-retryablehttp v0.7.8/go.mod h1:rjiScheydd+CxvumBsIrFKlx3iS0jrZ7LvzFGFmuKbw= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= -github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= -github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= -github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8= -github.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6FT1wIns= -github.com/hasura/go-graphql-client v0.15.1 h1:mCb5I+8Bk3FU3GKWvf/zDXkTh7FbGlqJmP3oisBdnN8= -github.com/hasura/go-graphql-client v0.15.1/go.mod h1:jfSZtBER3or+88Q9vFhWHiFMPppfYILRyl+0zsgPIIw= -github.com/hdevalence/ed25519consensus v0.2.0 h1:37ICyZqdyj0lAZ8P4D1d1id3HqbbG1N3iBb1Tb4rdcU= -github.com/hdevalence/ed25519consensus v0.2.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= -github.com/holiman/billy v0.0.0-20250707135307-f2f9b9aae7db h1:IZUYC/xb3giYwBLMnr8d0TGTzPKFGNTCGgGLoyeX330= -github.com/holiman/billy v0.0.0-20250707135307-f2f9b9aae7db/go.mod h1:xTEYN9KCHxuYHs+NmrmzFcnvHMzLLNiGFafCb1n3Mfg= -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.3.2 h1:a9EgMPSC1AAaj1SZL5zIQD3WbwTuHrMGOerLjGmM/TA= -github.com/holiman/uint256 v1.3.2/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= -github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= -github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= -github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= -github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= -github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= -github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= -github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= -github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= -github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/influxdata/influxdb-client-go/v2 v2.4.0 h1:HGBfZYStlx3Kqvsv1h2pJixbCl/jhnFtxpKFAv9Tu5k= -github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= -github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c h1:qSHzRbhzK8RdXOsAdfDgO49TtqC1oZ+acxPrkfTxcCs= -github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 h1:vilfsDSy7TDxedi9gyBkMvAirat/oRcL0lFdJBf6tdM= -github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/tdigest v0.0.1 h1:XpFptwYmnEKUqmkcDjrzffswZ3nvNeevbUSLPP/ZzIY= -github.com/influxdata/tdigest v0.0.1/go.mod h1:Z0kXnxzbTC2qrx4NaIzYkE1k66+6oEDQTvL95hQFh5Y= -github.com/invopop/jsonschema v0.14.0 h1:MHQqLhvpNUZfw+hM3AZDYK7jxO8FZoQeQM77g8iyZjg= -github.com/invopop/jsonschema v0.14.0/go.mod h1:ygm6C2EaVNMBDPpaPlnOA2pFAxBnxGjFlMZABxm9n2I= -github.com/jackc/chunkreader v1.0.0 h1:4s39bBR8ByfqH+DKm8rQA3E1LHZWB9XWcrz8fqaZbe0= -github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= -github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8= -github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA= -github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE= -github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s= -github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o= -github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY= -github.com/jackc/pgconn v1.9.1-0.20210724152538-d89c8390a530/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= -github.com/jackc/pgconn v1.14.3 h1:bVoTr12EGANZz66nZPkMInAV/KHD2TxH9npjXXgiB3w= -github.com/jackc/pgconn v1.14.3/go.mod h1:RZbme4uasqzybK2RK5c65VsHxoyaml09lx3tXOcO/VM= -github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= -github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= -github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= -github.com/jackc/pgmock v0.0.0-20201204152224-4fe30f7445fd/go.mod h1:hrBW0Enj2AZTNpt/7Y5rr2xe/9Mn757Wtb2xeBzPv2c= -github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65/go.mod h1:5R2h2EEX+qri8jOWMbJCtaPWkrrNc7OHwsp2TCqp7ak= -github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= -github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgproto3 v1.1.0 h1:FYYE4yRw+AgI8wXIinMlNjBbp/UitDJwfj5LqqewP1A= -github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= -github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgproto3/v2 v2.3.3 h1:1HLSx5H+tXR9pW3in3zaztoEwQYRC9SQaYUHjTSUOag= -github.com/jackc/pgproto3/v2 v2.3.3/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= -github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= -github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= -github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= -github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= -github.com/jackc/pgtype v1.8.1-0.20210724151600-32e20a603178/go.mod h1:C516IlIV9NKqfsMCXTdChteoXmwgUceqaLfjg2e3NlM= -github.com/jackc/pgtype v1.14.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= -github.com/jackc/pgtype v1.14.4 h1:fKuNiCumbKTAIxQwXfB/nsrnkEI6bPJrrSiMKgbJ2j8= -github.com/jackc/pgtype v1.14.4/go.mod h1:aKeozOde08iifGosdJpz9MBZonJOUJxqNpPBcMJTlVA= -github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= -github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= -github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= -github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgSXP7iUjYm9C1NxKhny7lq6ee99u/z+IHFcgs= -github.com/jackc/pgx/v4 v4.18.2/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw= -github.com/jackc/pgx/v4 v4.18.3 h1:dE2/TrEsGX3RBprb3qryqSV9Y60iZN1C6i8IrmW9/BA= -github.com/jackc/pgx/v4 v4.18.3/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw= -github.com/jackc/pgx/v5 v5.9.2 h1:3ZhOzMWnR4yJ+RW1XImIPsD1aNSz4T4fyP7zlQb56hw= -github.com/jackc/pgx/v5 v5.9.2/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= -github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= -github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= -github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= -github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jhump/protoreflect v1.17.0 h1:qOEr613fac2lOuTgWN4tPAtLL7fUSbuJL5X5XumQh94= -github.com/jhump/protoreflect v1.17.0/go.mod h1:h9+vUUL38jiBzck8ck+6G/aeMX8Z4QUY/NiJPwPNi+8= -github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8= -github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= -github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= -github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= -github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o= -github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY= -github.com/jonboulle/clockwork v0.5.0 h1:Hyh9A8u51kptdkR+cqRpT1EebBwTn1oK9YfGYbdFz6I= -github.com/jonboulle/clockwork v0.5.0/go.mod h1:3mZlmanh0g2NDKO5TWZVJAfofYk64M7XN3SzBPjZF60= -github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/juju/gnuflag v0.0.0-20171113085948-2ce1bb71843d/go.mod h1:2PavIy+JPciBPrBUjwbNvtwB6RQlve+hkpll6QSNmOE= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -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= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.18.6 h1:2jupLlAwFm95+YDR+NwD2MEfFO9d4z4Prjl1XXDjuao= -github.com/klauspost/compress v1.18.6/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= -github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= -github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/leanovate/gopter v0.2.11 h1:vRjThO1EKPb/1NsDXuDrzldR28RLkBflWYcU9CvzWu4= -github.com/leanovate/gopter v0.2.11/go.mod h1:aK3tzZP/C+p1m3SPRE4SYZFGP7jjkuSI4f7Xvpt0S9c= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= -github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= -github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.12.3 h1:tTWxr2YLKwIvK90ZXEw8GP7UFHtcbTtty8zsI+YjrfQ= -github.com/lib/pq v1.12.3/go.mod h1:/p+8NSbOcwzAEI7wiMXFlgydTwcgTr3OSKMsD2BitpA= -github.com/linxGnu/grocksdb v1.9.3 h1:s1cbPcOd0cU2SKXRG1nEqCOWYAELQjdqg3RVI2MH9ik= -github.com/linxGnu/grocksdb v1.9.3/go.mod h1:QYiYypR2d4v63Wj1adOOfzglnoII0gLj3PNh4fZkcFA= -github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8= -github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= -github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88 h1:PTw+yKnXcOFCR6+8hHTyWBeQ/P4Nb7dd4/0ohEcWQuM= -github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg= -github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE= -github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/manyminds/api2go v0.0.0-20171030193247-e7b693844a6f h1:tVvGiZQFjOXP+9YyGqSA6jE55x1XVxmoPYudncxrZ8U= -github.com/manyminds/api2go v0.0.0-20171030193247-e7b693844a6f/go.mod h1:Z60vy0EZVSu0bOugCHdcN5ZxFMKSpjRgsnh0XKPFqqk= -github.com/marcboeker/go-duckdb v1.8.5 h1:tkYp+TANippy0DaIOP5OEfBEwbUINqiFqgwMQ44jME0= -github.com/marcboeker/go-duckdb v1.8.5/go.mod h1:6mK7+WQE4P4u5AFLvVBmhFxY5fvhymFptghgJX6B+/8= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= -github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4= -github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.24 h1:cpokDiIn0MGnhdHwuWnJBITySJ20QyNGnY2kR/ay2DU= -github.com/mattn/go-runewidth v0.0.24/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= -github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= -github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= -github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mfridman/interpolate v0.0.2 h1:pnuTK7MQIxxFz1Gr+rjSIx9u7qVjf5VOoM/u6BbAxPY= -github.com/mfridman/interpolate v0.0.2/go.mod h1:p+7uk6oE07mpE/Ik1b8EckO0O4ZXiGAfshKBWLUM9Xg= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/minio/highwayhash v1.0.3 h1:kbnuUMoHYyVl7szWjSxJnxw11k2U709jqFPPmIUyD6Q= -github.com/minio/highwayhash v1.0.3/go.mod h1:GGYsuwP/fPD6Y9hMiXuapVvlIUEhFhMTh0rxU3ik1LQ= -github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= -github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= -github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= -github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY= -github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= -github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= -github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= -github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= -github.com/moby/go-archive v0.2.0 h1:zg5QDUM2mi0JIM9fdQZWC7U8+2ZfixfTYoHL7rWUcP8= -github.com/moby/go-archive v0.2.0/go.mod h1:mNeivT14o8xU+5q1YnNrkQVpK+dnNe/K6fHqnTg4qPU= -github.com/moby/moby/api v1.54.2 h1:wiat9QAhnDQjA7wk1kh/TqHz2I1uUA7M7t9SAl/JNXg= -github.com/moby/moby/api v1.54.2/go.mod h1:+RQ6wluLwtYaTd1WnPLykIDPekkuyD/ROWQClE83pzs= -github.com/moby/moby/client v0.4.1 h1:DMQgisVoMkmMs7fp3ROSdiBnoAu8+vo3GggFl06M/wY= -github.com/moby/moby/client v0.4.1/go.mod h1:z52C9O2POPOsnxZAy//WtKcQ32P+jT/NGeXu/7nfjGQ= -github.com/moby/patternmatcher v0.6.1 h1:qlhtafmr6kgMIJjKJMDmMWq7WLkKIo23hsrpR3x084U= -github.com/moby/patternmatcher v0.6.1/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= -github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= -github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko= -github.com/moby/sys/user v0.4.0 h1:jhcMKit7SA80hivmFJcbB1vqmw//wU61Zdui2eQXuMs= -github.com/moby/sys/user v0.4.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs= -github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= -github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= -github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ= -github.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8= -github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/mostynb/zstdpool-freelist v0.0.0-20201229113212-927304c0c3b1 h1:mPMvm6X6tf4w8y7j9YIt6V9jfWhL6QlbEc7CCmeQlWk= -github.com/mostynb/zstdpool-freelist v0.0.0-20201229113212-927304c0c3b1/go.mod h1:ye2e/VUEtE2BHE+G/QcKkcLQVAEJoYRFj5VUOQatCRE= -github.com/mr-tron/base58 v1.3.0 h1:K6Y13R2h+dku0wOqKtecgRnBUBPrZzLZy5aIj8lCcJI= -github.com/mr-tron/base58 v1.3.0/go.mod h1:2BuubE67DCSWwVfx37JWNG8emOC0sHEU4/HpcYgCLX8= -github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= -github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w= -github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= -github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= -github.com/neelance/sourcemap v0.0.0-20200213170602-2833bce08e4c/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oapi-codegen/runtime v1.1.2 h1:P2+CubHq8fO4Q6fV1tqDBZHCwpVpvPg7oKiYzQgXIyI= -github.com/oapi-codegen/runtime v1.1.2/go.mod h1:SK9X900oXmPWilYR5/WKPzt3Kqxn/uS/+lbpREv+eCg= -github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a h1:dlRvE5fWabOchtH7znfiFCcOvmIYgOeAS5ifBXBlh9Q= -github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s= -github.com/oklog/run v1.2.0 h1:O8x3yXwah4A73hJdlrwo/2X6J62gE5qTMusH0dvz60E= -github.com/oklog/run v1.2.0/go.mod h1:mgDbKRSwPhJfesJ4PntqFUbKQRZ50NgmZTSPlFA0YFk= -github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/ginkgo/v2 v2.27.2 h1:LzwLj0b89qtIy6SSASkzlNvX6WktqurSHwkk2ipF/Ns= -github.com/onsi/ginkgo/v2 v2.27.2/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zwn/ykDRo= -github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= -github.com/onsi/gomega v1.38.2 h1:eZCjf2xjZAqe+LeWvKb5weQ+NcPwX84kqJ0cZNxok2A= -github.com/onsi/gomega v1.38.2/go.mod h1:W2MJcYxRGV63b418Ai34Ud0hEdTVXq9NW9+Sx6uXf3k= -github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= -github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= -github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b h1:FfH+VrHHk6Lxt9HdVS0PXzSXFyS2NbZKXv33FYPol0A= -github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b/go.mod h1:AC62GU6hc0BrNm+9RK9VSiwa/EUe1bkIeFORAMcHvJU= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= -github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= -github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= -github.com/pb33f/ordered-map/v2 v2.3.1 h1:5319HDO0aw4DA4gzi+zv4FXU9UlSs3xGZ40wcP1nBjY= -github.com/pb33f/ordered-map/v2 v2.3.1/go.mod h1:qxFQgd0PkVUtOMCkTapqotNgzRhMPL7VvaHKbd1HnmQ= -github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= -github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= -github.com/pelletier/go-toml/v2 v2.3.1 h1:MYEvvGnQjeNkRF1qUuGolNtNExTDwct51yp7olPtrEc= -github.com/pelletier/go-toml/v2 v2.3.1/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= -github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 h1:oYW+YCJ1pachXTQmzR3rNLYGGz4g/UgFcjb28p/viDM= -github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/peterldowns/pgtestdb v0.1.1 h1:+hBCD1DcbKeg5Sfg0G+5WNIy/Cm0ORgwMkF4ygihrmU= -github.com/peterldowns/pgtestdb v0.1.1/go.mod h1:yVWInWV0dxvmLdL2ao3nXDzWZ9+G6EhJ4gRwvI1Ozeg= -github.com/peterldowns/testy v0.0.1 h1:9a6LzvnKcL52Crzud1z7jbsAojTntCh89ho6mgsr4KU= -github.com/peterldowns/testy v0.0.1/go.mod h1:J4sm75UEzbfBIcq0zbrshWWjsJQiJ5RrhTPYKVY2Ww8= -github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw= -github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/pierrec/lz4/v4 v4.1.26 h1:GrpZw1gZttORinvzBdXPUXATeqlJjqUG/D87TKMnhjY= -github.com/pierrec/lz4/v4 v4.1.26/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4= -github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= -github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= -github.com/pion/dtls/v3 v3.1.2 h1:gqEdOUXLtCGW+afsBLO0LtDD8GnuBBjEy6HRtyofZTc= -github.com/pion/dtls/v3 v3.1.2/go.mod h1:Hw/igcX4pdY69z1Hgv5x7wJFrUkdgHwAn/Q/uo7YHRo= -github.com/pion/logging v0.2.4 h1:tTew+7cmQ+Mc1pTBLKH2puKsOvhm32dROumOZ655zB8= -github.com/pion/logging v0.2.4/go.mod h1:DffhXTKYdNZU+KtJ5pyQDjvOAh/GsNSyv1lbkFbe3so= -github.com/pion/stun/v3 v3.1.2 h1:86IhD8wFn6IDW4b1/0QzoQS+f5PeA8OHHRn8UZW5ErY= -github.com/pion/stun/v3 v3.1.2/go.mod h1:H7gDic7nNwlUL05pbs6T1dtaBehh/KjupxfWw3ZI7cA= -github.com/pion/transport/v4 v4.0.1 h1:sdROELU6BZ63Ab7FrOLn13M6YdJLY20wldXW2Cu2k8o= -github.com/pion/transport/v4 v4.0.1/go.mod h1:nEuEA4AD5lPdcIegQDpVLgNoDGreqM/YqmEx3ovP4jM= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= -github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/pressly/goose/v3 v3.26.0 h1:KJakav68jdH0WDvoAcj8+n61WqOIaPGgH0bJWS6jpmM= -github.com/pressly/goose/v3 v3.26.0/go.mod h1:4hC1KrritdCxtuFsqgs1R4AU5bWtTAf+cnWvfhf2DNY= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= -github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= -github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v1.20.99 h1:vZEybF3CT0t6L0UjsOtHRML7vuIglHocmvJMMH/se4M= -github.com/prometheus/common v1.20.99/go.mod h1:VX44Tebe4qpuTK+MQWg25h4fJGKBqzObSdxuB7y8K/Y= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.20.1 h1:XwbrGOIplXW/AU3YhIhLODXMJYyC1isLFfYCsTEycfc= -github.com/prometheus/procfs v0.20.1/go.mod h1:o9EMBZGRyvDrSPH1RqdxhojkuXstoe4UlK79eF5TGGo= -github.com/prometheus/prometheus v0.311.3 h1:3IrVxQv6v5i/ZCGi6OrYeBhtCwaPTn6Z3DYruXoYm3M= -github.com/prometheus/prometheus v0.311.3/go.mod h1:gjsCxTKtHO1Q8T9333u1s+lUR1OjPyM7ruuGH8RvVyo= -github.com/prysmaticlabs/gohashtree v0.0.4-beta h1:H/EbCuXPeTV3lpKeXGPpEV9gsUpkqOOVnWapUyeWro4= -github.com/prysmaticlabs/gohashtree v0.0.4-beta/go.mod h1:BFdtALS+Ffhg3lGQIHv9HDWuHS8cTvHZzrHWxwOtGOs= -github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= -github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= -github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= -github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= -github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= -github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= -github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= -github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= -github.com/rs/zerolog v1.35.1 h1:m7xQeoiLIiV0BCEY4Hs+j2NG4Gp2o2KPKmhnnLiazKI= -github.com/rs/zerolog v1.35.1/go.mod h1:EjML9kdfa/RMA7h/6z6pYmq1ykOuA8/mjWaEvGI+jcw= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc= -github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik= -github.com/samber/lo v1.53.0 h1:t975lj2py4kJPQ6haz1QMgtId2gtmfktACxIXArw3HM= -github.com/samber/lo v1.53.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0= -github.com/sanity-io/litter v1.5.5 h1:iE+sBxPBzoK6uaEP5Lt3fHNgpKcHXc/A2HGETy0uJQo= -github.com/sanity-io/litter v1.5.5/go.mod h1:9gzJgR2i4ZpjZHsKvUXIRQVk7P+yM3e+jAF7bU2UI5U= -github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4= -github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY= -github.com/sasha-s/go-deadlock v0.3.5 h1:tNCOEEDG6tBqrNDOX35j/7hL5FcFViG6awUGROb2NsU= -github.com/sasha-s/go-deadlock v0.3.5/go.mod h1:bugP6EGbdGYObIlx7pUZtWqlvo8k9H6vCBBsiChJQ5U= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/scylladb/go-reflectx v1.0.1 h1:b917wZM7189pZdlND9PbIJ6NQxfDPfBvUaQ7cjj1iZQ= -github.com/scylladb/go-reflectx v1.0.1/go.mod h1:rWnOfDIRWBGN0miMLIcoPt/Dhi2doCMZqwMCJ3KupFc= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/sethvargo/go-retry v0.3.0 h1:EEt31A35QhrcRZtrYFDTBg91cqZVnFL2navjDrah2SE= -github.com/sethvargo/go-retry v0.3.0/go.mod h1:mNX17F0C/HguQMyMyJxcnU471gOZGxCLyYaFyAZraas= -github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= -github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shirou/gopsutil/v3 v3.24.3 h1:eoUGJSmdfLzJ3mxIhmOAhgKEKgQkeOwKpz1NbhVnuPE= -github.com/shirou/gopsutil/v3 v3.24.3/go.mod h1:JpND7O217xa72ewWz9zN2eIIkPWsDN/3pl0H8Qt0uwg= -github.com/shirou/gopsutil/v4 v4.26.3 h1:2ESdQt90yU3oXF/CdOlRCJxrP+Am1aBYubTMTfxJ1qc= -github.com/shirou/gopsutil/v4 v4.26.3/go.mod h1:LZ6ewCSkBqUpvSOf+LsTGnRinC6iaNUNMGBtDkJBaLQ= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= -github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= -github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= -github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/shurcooL/go v0.0.0-20200502201357-93f07166e636/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= -github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3 h1:aQKxg3+2p+IFXXg97McgDGT5zcMrQoi0EICZs8Pgchs= -github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3/go.mod h1:9/etS5gpQq9BJsJMWg1wpLbfuSnkm8dPF6FdW2JXVhA= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= -github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= -github.com/smartcontractkit/capabilities/libs v0.0.0-20260714133332-db2a5f11cd64 h1:D+N1i+pa+lmmd8llrSgCYmUxG3TX+iyGda5ac2sO4tc= -github.com/smartcontractkit/capabilities/libs v0.0.0-20260714133332-db2a5f11cd64/go.mod h1:DZkOtlIRV6ecpCskdXMF+k2es3uJQqTT1m5TRB9etjQ= -github.com/smartcontractkit/chain-selectors v1.0.106 h1:6Mz7FDooWJEcfvuOX3nH7oh5s44fqg/WqVDQS63Mjzs= -github.com/smartcontractkit/chain-selectors v1.0.106/go.mod h1:qy7whtgG5g+7z0jt0nRyii9bLND9m15NZTzuQPkMZ5w= -github.com/smartcontractkit/chainlink-aptos/codec v0.0.0-20260716230027-bd85997bc03c h1:aDS7I+SK9mWkDcWlfP5JrDY4NnicC/4KVm30dG7HQaw= -github.com/smartcontractkit/chainlink-aptos/codec v0.0.0-20260716230027-bd85997bc03c/go.mod h1:/ABThVk5DzhpsO1A4io8C6cAmqpF8RzgQDlGj98hke0= -github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= -github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= -github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260715130435-1e32cea69af1 h1:aOl7isLHR0MU+U24AymRJK8WWJQe1jxZ8fzYIF7uKLg= -github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260715130435-1e32cea69af1/go.mod h1:yIZX/Egl2OnDJKXzk28dl4DoYBMESzGOtKR4vNZq0Oc= -github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260624154507-ea7ff77a0ddb h1:bsokSvqbT4kewt+JpIySMR3pTlzAhFBxiWcXkWpCFMY= -github.com/smartcontractkit/chainlink-ccip/chains/evm v0.0.0-20260624154507-ea7ff77a0ddb/go.mod h1:FbFlai6KYc1SKjJxfU//6iLruq4SyHi4PYS1SRZYoM4= -github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260415165642-49f23e4d76cc h1:mvobZx5JV5PhG/9IXPReV+8mAGnupl0HIWQZ43zxzd4= -github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260415165642-49f23e4d76cc/go.mod h1:gzCVLUlNov/zFXSC7G6zcGkZU1IfNOHaakbAPDe5Woc= -github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20260415165642-49f23e4d76cc h1:War93neyFmv7pzuElZeZC3qc/OfGtLvEXvqL3qeBfM0= -github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20260415165642-49f23e4d76cc/go.mod h1:67YbnoglYD61Pz/jTVCgav9wFq7S35OU8UyQSvPllRw= -github.com/smartcontractkit/chainlink-ccv v0.1.1-0.20260716164331-d938b371c5d6 h1:t5VUHVFEdcqa0/faJiHWusuW+egKpqK3YwWZO4/yJto= -github.com/smartcontractkit/chainlink-ccv v0.1.1-0.20260716164331-d938b371c5d6/go.mod h1:0v6RGdYa9NezVnBPIAVyxB3A9furKWwaSkLha+URYGk= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260722132052-c7af471801f2 h1:JZLdNP/jAB2bfjD2u9pC6zST7dyG3Ch3PDi/ctEPDHQ= -github.com/smartcontractkit/chainlink-common v0.11.2-0.20260722132052-c7af471801f2/go.mod h1:DGvW2Opi/qcOWNkOq18xTI5ZqByoxfPTL9H5M1bC4Ls= -github.com/smartcontractkit/chainlink-common/keystore v1.2.1-0.20260623104656-f39eba3e2bc6 h1:DvfhsiIxB4JMuR+r1UciKV8jKiwhI/OZI/QhKawC4pM= -github.com/smartcontractkit/chainlink-common/keystore v1.2.1-0.20260623104656-f39eba3e2bc6/go.mod h1:6NefaCIMH4zFBN3T+cvsFGYoy3oTSPKDaxPAyBzlYTU= -github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260716165322-7f2edff6e954 h1:QhTMiEn3s+AB4xBoScuQglsqHGJYxheYrgpxdIdqNAI= -github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.11-0.20260716165322-7f2edff6e954/go.mod h1:UYcRMb4dZcoaIPgZJ3hckCySTqtJc9K4Q+tOKErwTq0= -github.com/smartcontractkit/chainlink-data-streams v1.0.0 h1:W+RfzuZHVt50ihlsB7+XpXiBw1v5hRks6DUK2HHH7A4= -github.com/smartcontractkit/chainlink-data-streams v1.0.0/go.mod h1:dF5JiHWueHjYguUUUrFeb03MkcDqha/tssEkqTkgzp4= -github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260722105404-d3fb34ccc58b h1:WtPAXEk1BjrOZHahBriBfArSdI3o0UYMuINCvPAknhs= -github.com/smartcontractkit/chainlink-evm v0.3.4-0.20260722105404-d3fb34ccc58b/go.mod h1:tY/8SASXBliC1IcsexALUZaQzJZ49wbnXWT3qjeva0s= -github.com/smartcontractkit/chainlink-evm/contracts/cre/gobindings v0.0.0-20260403151002-2c91155b5501 h1:QJiXTG9CmaQAuMRn5JGi+Jhji7fSkehVnKpjc8oNJJY= -github.com/smartcontractkit/chainlink-evm/contracts/cre/gobindings v0.0.0-20260403151002-2c91155b5501/go.mod h1:4cT1BeNF8DAn6In9zr3LayVCv1KzFeuxT7zcuNkfIb0= -github.com/smartcontractkit/chainlink-evm/gethwrappers v0.0.0-20260512150409-b4068bf735e6 h1:JFo7C3FilwhfwGBLAyj2umbL+P4QxGmVi/b8yt9kqvI= -github.com/smartcontractkit/chainlink-evm/gethwrappers v0.0.0-20260512150409-b4068bf735e6/go.mod h1:a260YnLyWq2NHLUN5cSVyMGk9nhO6RguCaTI2rsVqyA= -github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135 h1:8u9xUrC+yHrTDexOKDd+jrA6LCzFFHeX1G82oj2fsSI= -github.com/smartcontractkit/chainlink-feeds v0.1.2-0.20250227211209-7cd000095135/go.mod h1:NkvE4iQgiT7dMCP6U3xPELHhWhN5Xr6rHC0axRebyMU= -github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20260423135514-5b1a7565a99c h1:AYRSQarVw1EJXUrGvHSwmRTtNHHww/i3xwLat5CshUE= -github.com/smartcontractkit/chainlink-framework/capabilities v0.0.0-20260423135514-5b1a7565a99c/go.mod h1:HcwehCao5k5C2NGuKJUVoX/AYtoH6njGFiV44dBOcY4= -github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20260714194015-527495d10a6c h1:V+i0shB31mDGPRdB6KFz77uJPyCrnVIENLOKr5t+Pq8= -github.com/smartcontractkit/chainlink-framework/chains v0.0.0-20260714194015-527495d10a6c/go.mod h1:kGprqyjsz6qFNVszOQoHc24wfvCjyipNZFste/3zcbs= -github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20260709082627-78ab5315e367 h1:ugHHGzzrNJUyLBXio1WXVHkKP0RQW/hjTGbVYZDubMk= -github.com/smartcontractkit/chainlink-framework/metrics v0.0.0-20260709082627-78ab5315e367/go.mod h1:HG/aei0MgBOpsyRLexdKGtOUO8yjSJO3iUu0Uu8KBm4= -github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20260625152110-9afcf56e4053 h1:lW5ccLVGuDG8/VojIRMpjguVfXjA7UJBFYS0POWvrzs= -github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20260625152110-9afcf56e4053/go.mod h1:7ketk4ischPQW/JQgmyHz6zdzLUJv1VC29SiSgosydQ= -github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20251024234028-0988426d98f4 h1:GCzrxDWn3b7jFfEA+WiYRi8CKoegsayiDoJBCjYkneE= -github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20251024234028-0988426d98f4/go.mod h1:HHGeDUpAsPa0pmOx7wrByCitjQ0mbUxf0R9v+g67uCA= -github.com/smartcontractkit/chainlink-protos/chainlink-ccv/committee-verifier v0.0.0-20251211142334-5c3421fe2c8d h1:VYoBBNnQpZ5p+enPTl8SkKBRaubqyGpO0ul3B1np++I= -github.com/smartcontractkit/chainlink-protos/chainlink-ccv/committee-verifier v0.0.0-20251211142334-5c3421fe2c8d/go.mod h1:oNFoKHRIerxuaANa8ASNejtHrdsG26LqGtQ2XhSac2g= -github.com/smartcontractkit/chainlink-protos/chainlink-ccv/heartbeat v0.0.0-20260115142640-f6b99095c12e h1:c7vgdeidC0LMtV1a01B/rPL4fEC/cnPanRDflRijXCM= -github.com/smartcontractkit/chainlink-protos/chainlink-ccv/heartbeat v0.0.0-20260115142640-f6b99095c12e/go.mod h1:rZV/gLc1wlSp2r5oXN09iOrlyZPFX4iK+cqoSW2k5dc= -github.com/smartcontractkit/chainlink-protos/chainlink-ccv/message-discovery v0.0.0-20251211142334-5c3421fe2c8d h1:pKCyW7BYzO5GThFNlXZY0Azx/yOnI4b5GeuLeU23ie0= -github.com/smartcontractkit/chainlink-protos/chainlink-ccv/message-discovery v0.0.0-20251211142334-5c3421fe2c8d/go.mod h1:ATjAPIVJibHRcIfiG47rEQkUIOoYa6KDvWj3zwCAw6g= -github.com/smartcontractkit/chainlink-protos/chainlink-ccv/message-rules v0.0.0-20260505131349-78e491b80735 h1:TisH4dYVSh33CZI7qzIkGZx7RzhnynQuQEAdhjnzvb4= -github.com/smartcontractkit/chainlink-protos/chainlink-ccv/message-rules v0.0.0-20260505131349-78e491b80735/go.mod h1:zAJq6Tpkx5AdFUwW67dIYnW+Bdf50drCCpMR81Qxb4E= -github.com/smartcontractkit/chainlink-protos/chainlink-ccv/verifier v0.0.0-20251211142334-5c3421fe2c8d h1:AJy55QJ/pBhXkZjc7N+ATnWfxrcjq9BI9DmdtdjwDUQ= -github.com/smartcontractkit/chainlink-protos/chainlink-ccv/verifier v0.0.0-20251211142334-5c3421fe2c8d/go.mod h1:5JdppgngCOUS76p61zCinSCgOhPeYQ+OcDUuome5THQ= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260714170805-29c5577b5f55 h1:QD/iBCa4yY3z9q48PhsjpO9ml6+ZDW4vWJq0h8oelDk= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260714170805-29c5577b5f55/go.mod h1:/i8hjTPFdVWHiY+QjeSiVS2Z3GB3WAZznGgXHstC02E= -github.com/smartcontractkit/chainlink-protos/data-feeds v0.1.1-0.20260501174546-2e8846986b36 h1:SG+wAsNyAcA6Kk19ljuxi3HK9Ll2lpHik8OKoY4x7A0= -github.com/smartcontractkit/chainlink-protos/data-feeds v0.1.1-0.20260501174546-2e8846986b36/go.mod h1:vL1bDgPSJjV0EqHYs4dDlR+EEE0cJchgvGLYXhwIjXY= -github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-20260512230622-65f10f4cd305 h1:NJdGFhzT6zMaTod4QkBqVD2sg0I25iw1boOYtTpEwRo= -github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-20260512230622-65f10f4cd305/go.mod h1:qSTSwX3cBP3FKQwQacdjArqv0g6QnukjV4XuzO6UyoY= -github.com/smartcontractkit/chainlink-protos/metering/go v0.0.0-20260710151514-27b5a126dabe h1:MDnY5wQbWTpFdDnMRicEnoMfSP5nM/KncARr4skP1ug= -github.com/smartcontractkit/chainlink-protos/metering/go v0.0.0-20260710151514-27b5a126dabe/go.mod h1:z7lx7wI3XZ4u9kmUtAVdwn1BCC9T8aieWSDcuDgPTdQ= -github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260709145319-7782fb89eb16 h1:/vkKPJoweLkRd56V4YHGRAtTG4+/JAlgklGEfvH6l4c= -github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260709145319-7782fb89eb16/go.mod h1:dkR2uYg9XYJuT1JASkPzWE51jjFkVb86P7a/yXe5/GM= -github.com/smartcontractkit/chainlink-protos/orchestrator v0.11.0 h1:NXKTdIESAiCkVnPS6dyZP+NXVek3GzXa6P4uFAs0o8Y= -github.com/smartcontractkit/chainlink-protos/orchestrator v0.11.0/go.mod h1:m/A3lqD7ms/RsQ9BT5P2uceYY0QX5mIt4KQxT2G6qEo= -github.com/smartcontractkit/chainlink-protos/ring/go v0.0.0-20260331131315-f08a616d8dcd h1:7DURXB3+Qf9REr3XA+q0FNyZO3CSAeSgJvNaek/GiZI= -github.com/smartcontractkit/chainlink-protos/ring/go v0.0.0-20260331131315-f08a616d8dcd/go.mod h1:aifeP3SnsVrO1eSN5Smur3iHjAmi3poaLt6TAbgK0Hw= -github.com/smartcontractkit/chainlink-protos/storage-service v0.3.0 h1:B7itmjy+CMJ26elVw/cAJqqhBQ3Xa/mBYWK0/rQ5MuI= -github.com/smartcontractkit/chainlink-protos/storage-service v0.3.0/go.mod h1:h6kqaGajbNRrezm56zhx03p0mVmmA2xxj7E/M4ytLUA= -github.com/smartcontractkit/chainlink-protos/svr v1.3.0 h1:vOw+MbXtkPK8l/hA7uLASIgCwv05YzmuoIMuOXPa+g0= -github.com/smartcontractkit/chainlink-protos/svr v1.3.0/go.mod h1:TcOliTQU6r59DwG4lo3U+mFM9WWyBHGuFkkxQpvSujo= -github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260716141634-c0cc05ed05d8 h1:htXgwGej8MmWFrJaGu+QnMSeaPBFAWEnVp22XS23G+M= -github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20260716141634-c0cc05ed05d8/go.mod h1:GTpDgyK0OObf7jpch6p8N281KxN92wbB8serZhU9yRc= -github.com/smartcontractkit/chainlink-sui/codec v0.0.0-20260720132736-e99278bfdc96 h1:3R9f6pguDIjei+nKx5dUT9j6fX8urGmlZA7Ad3x9UBs= -github.com/smartcontractkit/chainlink-sui/codec v0.0.0-20260720132736-e99278bfdc96/go.mod h1:pSW9q0/YqQE5R65Z/2zsyD9c50JZf+yRJJvN6Jo3LCU= -github.com/smartcontractkit/chainlink-ton/cciplib v0.1.1-0.20260716214810-db5ecc877490 h1:ots2WddFOQJL/tDFGmvrhRrVu2iRXCd0XEAxhpkAE/Y= -github.com/smartcontractkit/chainlink-ton/cciplib v0.1.1-0.20260716214810-db5ecc877490/go.mod h1:WjihFo64itMaOcaDMJ97iz0cJYO2zlLfPdUkF7/mQNo= -github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20260408092456-3c6369888d4a h1:Xu8iBnBQEibWIXTCwKYf8okXjFtzJ0KochjL03h+T40= -github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20260408092456-3c6369888d4a/go.mod h1:1eaXR+Fe6TlpP+CKXozfYlFM8QgN/N5C7OMvTRWNT8I= -github.com/smartcontractkit/chainlink-tron/relayer/gotron-sdk v0.0.5-0.20251014124537-af6b1684fe15 h1:idp/RjsFznR48JWGfZICsrpcl9JTrnMzoUNVz8MhQMI= -github.com/smartcontractkit/chainlink-tron/relayer/gotron-sdk v0.0.5-0.20251014124537-af6b1684fe15/go.mod h1:ea1LESxlSSOgc2zZBqf1RTkXTMthHaspdqUHd7W4lF0= -github.com/smartcontractkit/chainlink/v2 v2.29.1-cre-beta.0.0.20260722144435-8217cb5fab8b h1:RN78zO0vXK4inx1t/kprh1hlYxIFM4KNvJk8fmGGJVA= -github.com/smartcontractkit/chainlink/v2 v2.29.1-cre-beta.0.0.20260722144435-8217cb5fab8b/go.mod h1:OwZ0K+yY8joTdHfGmGGy/qkCQQFyJAiNt8sWDBFUaIQ= -github.com/smartcontractkit/cre-sdk-go v1.9.0-capdev.1.0.20260625132924-dcceeb57cf3c h1:qiGPrHrenUxgnK2mYUBEcgR9KXRdW+U7mQO59pElmmg= -github.com/smartcontractkit/cre-sdk-go v1.9.0-capdev.1.0.20260625132924-dcceeb57cf3c/go.mod h1:gL4GT6WUvna7MYGJXAqOq65xpQpG9bnQcdAfqCbKgH4= -github.com/smartcontractkit/cre-sdk-go/capabilities/blockchain/evm v0.6.0 h1:dbWA/2RItveFYTQUSwQ4oG2yyebQMyFQLrpXwFuz8v4= -github.com/smartcontractkit/cre-sdk-go/capabilities/blockchain/evm v0.6.0/go.mod h1:9fHgexpWaQK7pPJAgak5ULbjEI3fOEIlNZZ+NSBq4bY= -github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v1.3.0 h1:qBZ4y6qlTOynSpU1QAi2Fgr3tUZQ332b6hit9EVZqkk= -github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v1.3.0/go.mod h1:Rzhy75vD3FqQo/SV6lypnxIwjWac6IOWzI5BYj3tYMU= -github.com/smartcontractkit/freeport v0.1.3-0.20250828155247-add56fa28aad h1:lgHxTHuzJIF3Vj6LSMOnjhqKgRqYW+0MV2SExtCYL1Q= -github.com/smartcontractkit/freeport v0.1.3-0.20250828155247-add56fa28aad/go.mod h1:T4zH9R8R8lVWKfU7tUvYz2o2jMv1OpGCdpY2j2QZXzU= -github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 h1:12ijqMM9tvYVEm+nR826WsrNi6zCKpwBhuApq127wHs= -github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7/go.mod h1:FX7/bVdoep147QQhsOPkYsPEXhGZjeYx6lBSaSXtZOA= -github.com/smartcontractkit/libocr v0.0.0-20260810200708-618b5bf7f342 h1:pEcgcjTGA83MzpqbTbyIg9AJrOs62s77SooDdJGIg9w= -github.com/smartcontractkit/libocr v0.0.0-20260810200708-618b5bf7f342/go.mod h1:5JPtsRwjugpyfsdEALC4RopfvohqK/G+3DHaR8uv+Bc= -github.com/smartcontractkit/smdkg v0.0.0-20251029093710-c38905e58aeb h1:kLHdQQkijaPGsBbtV2rJgpzVpQ96e7T10pzjNlWfK8U= -github.com/smartcontractkit/smdkg v0.0.0-20251029093710-c38905e58aeb/go.mod h1:4s5hj/nlMF9WV+T5Uhy4n9IYpRpzfJzT+vTKkNT7T+Y= -github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20260626090144-2343efd61516 h1:kAPHGWh+7nXLvU9aQ+FLmy6k6wNJK/IPzFAl7QpGRaM= -github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20260626090144-2343efd61516/go.mod h1:ceeXxY+DgWnlTDjvaOlYuP+NrcNnvSbrzFwVXYJpkP4= -github.com/smartcontractkit/tdh2/go/tdh2 v0.0.0-20251120172354-e8ec0386b06c h1:S1AFIjfHT95ev6gqHKBGy1zj3Tz0fIN3XzkaDUn77wY= -github.com/smartcontractkit/tdh2/go/tdh2 v0.0.0-20251120172354-e8ec0386b06c/go.mod h1:NSc7hgOQbXG3DAwkOdWnZzLTZENXSwDJ7Va1nBp0YU0= -github.com/smartcontractkit/wsrpc v0.8.5-0.20250502134807-c57d3d995945 h1:zxcODLrFytOKmAd8ty8S/XK6WcIEJEgRBaL7sY/7l4Y= -github.com/smartcontractkit/wsrpc v0.8.5-0.20250502134807-c57d3d995945/go.mod h1:m3pdp17i4bD50XgktkzWetcV5yaLsi7Gunbv4ZgN6qg= -github.com/smarty/assertions v1.15.0/go.mod h1:yABtdzeQs6l1brC900WlRNwj6ZR55d7B+E8C6HtKdec= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smartystreets/goconvey v1.8.1/go.mod h1:+/u4qLyY6x1jReYOp7GOM2FSt8aP9CzCZL03bI28W60= -github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw= -github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= -github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= -github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= -github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= -github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= -github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= -github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= -github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU= -github.com/spf13/viper v1.21.0/go.mod h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY= -github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad/go.mod h1:qLr4V1qq6nMqFKkMo8ZTx3f+BZEkzsRUY10Xsm2mwU0= -github.com/stellar/go-stellar-sdk v0.5.0 h1:xpOO+ZTyvGz54wTm7pwl2Gf1e6lZl0ExrJ/tKb+Roj4= -github.com/stellar/go-stellar-sdk v0.5.0/go.mod h1:tLKAQPxa2I5UvGMabBbUXcY3fmgYnfDudrMeK7CDX4w= -github.com/stellar/go-xdr v0.0.0-20260423131911-a87d4d0789c3 h1:/NnsQpfVYPFr5Xm/V7EOblI8P05zewwkJLOlLItsW7U= -github.com/stellar/go-xdr v0.0.0-20260423131911-a87d4d0789c3/go.mod h1:If+U9Z1W5xU97VrOgJandQT+2dN7/iOpkCrxBJEyF80= -github.com/stephenlacy/go-ethereum-hdwallet v0.0.0-20230913225845-a4fa94429863 h1:ba4VRWSkRzgdP5hB5OxexIzBXZbSwgcw8bEu06ivGQI= -github.com/stephenlacy/go-ethereum-hdwallet v0.0.0-20230913225845-a4fa94429863/go.mod h1:oPTjPNrRucLv9mU27iNPj6n0CWWcNFhoXFOLVGJwHCA= -github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091 h1:RN5mrigyirb8anBEtdjtHFIufXdacyTi6i4KBfeNXeo= -github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091/go.mod h1:VlduQ80JcGJSargkRU4Sg9Xo63wZD/l8A5NC/Uo1/uU= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= -github.com/stretchr/objx v0.5.3 h1:jmXUvGomnU1o3W/V5h2VEradbpJDwGrzugQQvL0POH4= -github.com/stretchr/objx v0.5.3/go.mod h1:rDQraq+vQZU7Fde9LOZLr8Tax6zZvy4kuNKF+QYS+U0= -github.com/stretchr/testify v0.0.0-20161117074351-18a02ba4a312/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= -github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= -github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= -github.com/supranational/blst v0.3.16 h1:bTDadT+3fK497EvLdWRQEjiGnUtzJ7jjIUMF0jqwYhE= -github.com/supranational/blst v0.3.16/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= -github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= -github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= -github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/test-go/testify v1.1.4 h1:Tf9lntrKUMHiXQ07qBScBTSA0dhYQlu83hswqelv1iE= -github.com/test-go/testify v1.1.4/go.mod h1:rH7cfJo/47vWGdi4GPj16x3/t1xGOj2YxzmNQzk2ghU= -github.com/testcontainers/testcontainers-go v0.42.0 h1:He3IhTzTZOygSXLJPMX7n44XtK+qhjat1nI9cneBbUY= -github.com/testcontainers/testcontainers-go v0.42.0/go.mod h1:vZjdY1YmUA1qEForxOIOazfsrdyORJAbhi0bp8plN30= -github.com/testcontainers/testcontainers-go/modules/postgres v0.41.0 h1:AOtFXssrDlLm84A2sTTR/AhvJiYbrIuCO59d+Ro9Tb0= -github.com/testcontainers/testcontainers-go/modules/postgres v0.41.0/go.mod h1:k2a09UKhgSp6vNpliIY0QSgm4Hi7GXVTzWvWgUemu/8= -github.com/theodesp/go-heaps v0.0.0-20190520121037-88e35354fe0a h1:YuO+afVc3eqrjiCUizNCxI53bl/BnPiVwXqLzqYTqgU= -github.com/theodesp/go-heaps v0.0.0-20190520121037-88e35354fe0a/go.mod h1:/sfW47zCZp9FrtGcWyo1VjbgDaodxX9ovZvgLb/MxaA= -github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= -github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= -github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= -github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/match v1.2.0 h1:0pt8FlkOwjN2fPt4bIl4BoNxb98gGHN2ObFEDkrfZnM= -github.com/tidwall/match v1.2.0/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= -github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= -github.com/tklauser/go-sysconf v0.4.0 h1:7H0uAN+7RkwWRaxhYXDLqa5V3LPrJeV8wmD9dRUgPQU= -github.com/tklauser/go-sysconf v0.4.0/go.mod h1:8mTNWyog7H+MpKijp4VmKJAd2bbYQ2zuUwkYRbUArPI= -github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= -github.com/tklauser/numcpus v0.12.0 h1:NR85qdvHA9pFse3x3weVZ0r0ST8R6l5RHbZrlRaqob4= -github.com/tklauser/numcpus v0.12.0/go.mod h1:ABHeXzJnr/qqwguhClkZKT1/8VABcYrsyUiUGobwWJg= -github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= -github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= -github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= -github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= -github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= -github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= -github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= -github.com/ulule/limiter/v3 v3.11.2 h1:P4yOrxoEMJbOTfRJR2OzjL90oflzYPPmWg+dvwN2tHA= -github.com/ulule/limiter/v3 v3.11.2/go.mod h1:QG5GnFOCV+k7lrL5Y8kgEeeflPH3+Cviqlqa8SVSQxI= -github.com/umbracle/ethgo v0.1.3 h1:s8D7Rmphnt71zuqrgsGTMS5gTNbueGO1zKLh7qsFzTM= -github.com/umbracle/ethgo v0.1.3/go.mod h1:g9zclCLixH8liBI27Py82klDkW7Oo33AxUOr+M9lzrU= -github.com/umbracle/fastrlp v0.0.0-20220527094140-59d5dd30e722 h1:10Nbw6cACsnQm7r34zlpJky+IzxVLRk6MKTS2d3Vp0E= -github.com/umbracle/fastrlp v0.0.0-20220527094140-59d5dd30e722/go.mod h1:c8J0h9aULj2i3umrfyestM6jCq0LK0U6ly6bWy96nd4= -github.com/unrolled/secure v1.13.0 h1:sdr3Phw2+f8Px8HE5sd1EHdj1aV3yUwed/uZXChLFsk= -github.com/unrolled/secure v1.13.0/go.mod h1:BmF5hyM6tXczk3MpQkFf1hpKSRqCyhqcbiQtiAF7+40= -github.com/urfave/cli v1.22.14 h1:ebbhrRiGK2i4naQJr+1Xj92HXZCrK7MsyTS/ob3HnAk= -github.com/urfave/cli v1.22.14/go.mod h1:X0eDS6pD6Exaclxm99NJ3FiCDRED7vIHpx2mDOHLvkA= -github.com/urfave/cli/v2 v2.27.7 h1:bH59vdhbjLv3LAvIu6gd0usJHgoTTPhCFib8qqOwXYU= -github.com/urfave/cli/v2 v2.27.7/go.mod h1:CyNAG/xg+iAOg0N4MPGZqVmv2rCoP267496AOXUZjA4= -github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fastjson v1.6.10 h1:/yjJg8jaVQdYR3arGxPE2X5z89xrlhS0eGXdv+ADTh4= -github.com/valyala/fastjson v1.6.10/go.mod h1:e6FubmQouUNP73jtMLmcbxS6ydWIpOfhz34TSfO3JaE= -github.com/wlynxg/anet v0.0.5 h1:J3VJGi1gvo0JwZ/P1/Yc/8p63SoW98B5dHkYDmpgvvU= -github.com/wlynxg/anet v0.0.5/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= -github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= -github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= -github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= -github.com/xssnick/tonutils-go v1.14.1 h1:zV/iVYl/h3hArS+tPsd9XrSFfGert3r21caMltPSeHg= -github.com/xssnick/tonutils-go v1.14.1/go.mod h1:68xwWjpoGGqiTbLJ0gT63sKu1Z1moCnDLLzA+DKanIg= -github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= -github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= -github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ= -github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= -github.com/zeebo/xxh3 v1.1.0 h1:s7DLGDK45Dyfg7++yxI0khrfwq9661w9EN78eP/UZVs= -github.com/zeebo/xxh3 v1.1.0/go.mod h1:IisAie1LELR4xhVinxWS5+zf1lA4p0MW4T+w+W07F5s= -github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= -github.com/zksync-sdk/zksync2-go v1.1.1-0.20250620124214-2c742ee399c6 h1:VRdX3Gn/I7ITbzUY4ZNfgn65tdQM9Zhf2b7KP0HZllk= -github.com/zksync-sdk/zksync2-go v1.1.1-0.20250620124214-2c742ee399c6/go.mod h1:NWNlQS21isOsSsn+hLRAPpiuv+3P+LcdaZNuRt2T5Yo= -github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= -github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= -github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI= -go.dedis.ch/fixbuf v1.0.3 h1:hGcV9Cd/znUxlusJ64eAlExS+5cJDIyTyEG+otu5wQs= -go.dedis.ch/fixbuf v1.0.3/go.mod h1:yzJMt34Wa5xD37V5RTdmp38cz3QhMagdGoem9anUalw= -go.dedis.ch/kyber/v3 v3.0.4/go.mod h1:OzvaEnPvKlyrWyp3kGXlFdp7ap1VC6RkZDTaPikqhsQ= -go.dedis.ch/kyber/v3 v3.0.9/go.mod h1:rhNjUUg6ahf8HEg5HUvVBYoWY4boAafX8tYxX+PS+qg= -go.dedis.ch/kyber/v3 v3.1.0 h1:ghu+kiRgM5JyD9TJ0hTIxTLQlJBR/ehjWvWwYW3XsC0= -go.dedis.ch/kyber/v3 v3.1.0/go.mod h1:kXy7p3STAurkADD+/aZcsznZGKVHEqbtmdIzvPfrs1U= -go.dedis.ch/protobuf v1.0.5/go.mod h1:eIV4wicvi6JK0q/QnfIEGeSFNG0ZeB24kzut5+HaRLo= -go.dedis.ch/protobuf v1.0.7/go.mod h1:pv5ysfkDX/EawiPqcW3ikOxsL5t+BqnV6xHSmE79KI4= -go.dedis.ch/protobuf v1.0.11/go.mod h1:97QR256dnkimeNdfmURz0wAMNVbd1VmLXhG1CrTYrJ4= -go.etcd.io/bbolt v1.4.2 h1:IrUHp260R8c+zYx/Tm8QZr04CX+qWS5PGfPdevhdm1I= -go.etcd.io/bbolt v1.4.2/go.mod h1:Is8rSHO/b4f3XigBC0lL0+4FwAQv3HXEEIgFMuKHceM= -go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.mongodb.org/mongo-driver v1.17.9 h1:IexDdCuuNJ3BHrELgBlyaH9p60JXAvdzWR128q+U5tU= -go.mongodb.org/mongo-driver v1.17.9/go.mod h1:LlOhpH5NUEfhxcAwG0UEkMqwYcc4JU18gtCdGudk/tQ= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= -go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/contrib/bridges/prometheus v0.68.0 h1:w3zlHYETbDwXyWHZlyyR58ZC39XGi8rAhkBgUgJ9d5w= -go.opentelemetry.io/contrib/bridges/prometheus v0.68.0/go.mod h1:GR/mClR2nn7vE8RLwxKjoBNg+QtgdDhRzxVa93koy5o= -go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin v0.49.0 h1:1f31+6grJmV3X4lxcEvUy13i5/kfDw1nJZwhd8mA4tg= -go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin v0.49.0/go.mod h1:1P/02zM3OwkX9uki+Wmxw3a5GVb6KUXRsa7m7bOC9Fg= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 h1:0Qx7VGBacMm9ZENQ7TnNObTYI4ShC+lHI16seduaxZo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0/go.mod h1:Sje3i3MjSPKTSPvVWCaL8ugBzJwik3u4smCjUeuupqg= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 h1:OyrsyzuttWTSur2qN/Lm0m2a8yqyIjUVBZcxFPuXq2o= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0/go.mod h1:C2NGBr+kAB4bk3xtMXfZ94gqFDtg/GkI7e9zqGh5Beg= -go.opentelemetry.io/contrib/propagators/b3 v1.24.0 h1:n4xwCdTx3pZqZs2CjS/CUZAs03y3dZcGhC/FepKtEUY= -go.opentelemetry.io/contrib/propagators/b3 v1.24.0/go.mod h1:k5wRxKRU2uXx2F8uNJ4TaonuEO/V7/5xoz7kdsDACT8= -go.opentelemetry.io/otel v1.6.3/go.mod h1:7BgNga5fNlF/iZjG06hM3yofffp0ofKCDwSXx1GC4dI= -go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= -go.opentelemetry.io/otel v1.44.0 h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU= -go.opentelemetry.io/otel v1.44.0/go.mod h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.19.0 h1:Dn8rkudDzY6KV9dr/D/bTUuWgqDf9xe0rr4G2elrn0Y= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.19.0/go.mod h1:gMk9F0xDgyN9M/3Ed5Y1wKcx/9mlU91NXY2SNq7RQuU= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.20.0 h1:owlhcJ3QO3X0YTDTCcDZ4V+6aVDkWbNmBoQ5NUp7Oww= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.20.0/go.mod h1:MP4eemTiI9zC8fgg+DYynhYDYf3ba72S376TvP+Ye0Q= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.43.0 h1:8UQVDcZxOJLtX6gxtDt3vY2WTgvZqMQRzjsqiIHQdkc= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.43.0/go.mod h1:2lmweYCiHYpEjQ/lSJBYhj9jP1zvCvQW4BqL9dnT7FQ= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.43.0 h1:w1K+pCJoPpQifuVpsKamUdn9U0zM3xUziVOqsGksUrY= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.43.0/go.mod h1:HBy4BjzgVE8139ieRI75oXm3EcDN+6GhD88JT1Kjvxg= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 h1:88Y4s2C8oTui1LGM6bTWkw0ICGcOLCAI5l6zsD1j20k= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0/go.mod h1:Vl1/iaggsuRlrHf/hfPJPvVag77kKyvrLeD10kpMl+A= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 h1:RAE+JPfvEmvy+0LzyUA25/SGawPwIUbZ6u0Wug54sLc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0/go.mod h1:AGmbycVGEsRx9mXMZ75CsOyhSP6MFIcj/6dnG+vhVjk= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0 h1:3iZJKlCZufyRzPzlQhUIWVmfltrXuGyfjREgGP3UUjc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0/go.mod h1:/G+nUPfhq2e+qiXMGxMwumDrP5jtzU+mWN7/sjT2rak= -go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.19.0 h1:GJkybS+crDMdExT/BUNCEgfrmfboztcS6PhvSo88HKM= -go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.19.0/go.mod h1:NuAyxRYIG2lKX3YQkB+83StTxM7s52PUUkRRiC0wnYI= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0 h1:TC+BewnDpeiAmcscXbGMfxkO+mwYUwE/VySwvw88PfA= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0/go.mod h1:J/ZyF4vfPwsSr9xJSPyQ4LqtcTPULFR64KwTikGLe+A= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.43.0 h1:mS47AX77OtFfKG4vtp+84kuGSFZHTyxtXIN269vChY0= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.43.0/go.mod h1:PJnsC41lAGncJlPUniSwM81gc80GkgWJWr3cu2nKEtU= -go.opentelemetry.io/otel/log v0.20.0 h1:/5i0vuHxCLWUfChWG41K9wkM0jafruPw9NU1/RCJirs= -go.opentelemetry.io/otel/log v0.20.0/go.mod h1:wOcMcjsZpG8x7Bak7IhSi/lg8wscV2C1VdrKCLPlt0E= -go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= -go.opentelemetry.io/otel/metric v1.44.0 h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc= -go.opentelemetry.io/otel/metric v1.44.0/go.mod h1:8O7hanEPBNgEMmybD3s2VBKcgWOCsA6tzHBPODAiquo= -go.opentelemetry.io/otel/metric/x v0.66.0 h1:YkCrx1zLOChi9ZcZ6euupOcsgzbVlec7D/xoEU1+cTA= -go.opentelemetry.io/otel/metric/x v0.66.0/go.mod h1:d1+BDj9t96do0/1LoU1ayfCv79ZgNE41qbhBvnMOBZk= -go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= -go.opentelemetry.io/otel/sdk v1.44.0 h1:nHYwb9lK+fJPU/dnT6s7W7Z8itMWyqrnVfbheVYrZ58= -go.opentelemetry.io/otel/sdk v1.44.0/go.mod h1:Osuydd3Se74nqjAKxid74N5eC+jfEqfTegHRnq58oK0= -go.opentelemetry.io/otel/sdk/log v0.20.0 h1:vM3xI7TQgKPiSghe6urZtAkyFY7SodrSpC83CffDFuY= -go.opentelemetry.io/otel/sdk/log v0.20.0/go.mod h1:Knej2nmsTUzN79T2eeXdRsjjPcoxoq2pUyUHz9TFyyU= -go.opentelemetry.io/otel/sdk/log/logtest v0.20.0 h1:OqdRZ1guyzamK3M6LlRsmGqRrjkHWw6WZOKKli5ELpg= -go.opentelemetry.io/otel/sdk/log/logtest v0.20.0/go.mod h1:PuMIlm7zAt7c3z8zfOI5ox4iT1Z87We+PF6YoINux/M= -go.opentelemetry.io/otel/sdk/metric v1.44.0 h1:3LlKgI+VjbVsjNRFZJZAJ30WjXC5VkNRks6si09iEfI= -go.opentelemetry.io/otel/sdk/metric v1.44.0/go.mod h1:5B5pMARnXxKhltooO4xUuCBorl65a4EpnTalObqOigA= -go.opentelemetry.io/otel/trace v1.6.3/go.mod h1:GNJQusJlUgZl9/TQBPKU/Y/ty+0iVB5fjhKeJGZPGFs= -go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= -go.opentelemetry.io/otel/trace v1.44.0 h1:jxF5CsGYCe74MCRx2X4g7WsY/VBKRqqpNvXlX/6gtIk= -go.opentelemetry.io/otel/trace v1.44.0/go.mod h1:oLl1jrMQAVo6v3GAggN+1VH9VIz9iUSvW53sW1Q8PIE= -go.opentelemetry.io/proto/otlp v1.10.0 h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g= -go.opentelemetry.io/proto/otlp v1.10.0/go.mod h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= -go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= -go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= -go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/ratelimit v0.3.1 h1:K4qVE+byfv/B3tC+4nYWP7v/6SimcO7HzHekoMNBma0= -go.uber.org/ratelimit v0.3.1/go.mod h1:6euWsTB6U/Nb3X++xEUXA8ciPJvr19Q/0h1+oDcJhRk= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= -go.uber.org/zap v1.28.0 h1:IZzaP1Fv73/T/pBMLk4VutPl36uNC+OSUh3JLG3FIjo= -go.uber.org/zap v1.28.0/go.mod h1:rDLpOi171uODNm/mxFcuYWxDsqWSAVkFdX4XojSKg/Q= -go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ= -go.yaml.in/yaml/v2 v2.4.4/go.mod h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ= -go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= -go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= -go.yaml.in/yaml/v4 v4.0.0-rc.4 h1:UP4+v6fFrBIb1l934bDl//mmnoIZEDK0idg1+AIvX5U= -go.yaml.in/yaml/v4 v4.0.0-rc.4/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0= -golang.org/x/arch v0.11.0 h1:KXV8WWKCXm6tRpLirl2szsO5j/oOODwZf4hATmGVNs4= -golang.org/x/arch v0.11.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= -golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= -golang.org/x/crypto v0.54.0 h1:YLIA59K4fiNzHzjnZt2tUJQjQtUWfWbeHBqKtk3eScw= -golang.org/x/crypto v0.54.0/go.mod h1:KWL8ny2AZdGR2cWmzeHrp2azQPGogOv+HeQaVEXC2dk= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20260508232706-74f9aab9d74a h1:+3jdDGGB8NGb1Zktc737jlt3/A5f6UlwSzmvqUuufxw= -golang.org/x/exp v0.0.0-20260508232706-74f9aab9d74a/go.mod h1:d2fgXJLVs4dYDHUk5lwMIfzRzSrWCfGZb0ZqeLa/Vcw= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.37.0 h1:vF1DjpVEshcIqoEaauuHebaLk1O1forxjxBaVn884JQ= -golang.org/x/mod v0.37.0/go.mod h1:m8S8VeM9r4dzDwjrKO0a1sZP3YjeMamRRlD+fmR2Q/0= -golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210331212208-0fccb6fa2b5c/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE= -golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= -golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= -golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210331175145-43e1dd70ce54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.14.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.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= -golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -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= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= -golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.45.0 h1:NwWyBmoJCbfTHpxrWoZ9C6/VxOf7ic219I8xZZFdrf0= -golang.org/x/term v0.45.0/go.mod h1:9aqxs0blBcrm/n0L9QW0aRVD+ktan8ssZromtqJC43w= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -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= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.13.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.40.0 h1:Ub2Z6/xjgF1WrYQz2nuITOEegKFtiIy+rieRJ5lHZKs= -golang.org/x/text v0.40.0/go.mod h1:hpnzDAfGV753zIKo+wk3u1bVKCGPbrnF7+7LBF/UHVY= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= -golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= -golang.org/x/tools v0.47.0 h1:7Kn5x/d1svx/PzryTsqeoZN4TZwqeH5pGWjefhLi/1Q= -golang.org/x/tools v0.47.0/go.mod h1:dFHnyTvFWY212G+h7ZY4Vsp/K3U4/7W9TyVaAul8uCA= -golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= -gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= -gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210401141331-865547bb08e2/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2 h1:1tXaIXCracvtsRxSBsYDiSBN0cuJvM7QYW+MrpIRY78= -google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2/go.mod h1:49MsLSx0oWMOZqcpB3uL8ZOkAh1+TndpJ8ONoCBWiZk= -google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa h1:Kjn0N0tCrDgiAFW+lGO4JZ3ck44CehvJQMAwj9QF0G8= -google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:q4lMZS6kskjT5HvCPrnnypcDPVJqT/f4nfxmkE7gryY= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa h1:mZHHdPZl0dbGHCflZgAq/Q468DWVFcU2whhB2KAo8fk= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.82.1 h1:NnAxzGRA0677vCa4BUkOAnO5+FfQqVl9iUXeD0IqcGE= -google.golang.org/grpc v1.82.1/go.mod h1:yzTZ1TB1Z3SG+LIYaI+WiE8D5+PZ3ArnrSp8zF3+/ZA= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= -google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -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/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= -gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= -gopkg.in/guregu/null.v2 v2.1.2 h1:YOuepWdYqGnrenzPyMi+ybCjeDzjdazynbwsXXOk4i8= -gopkg.in/guregu/null.v2 v2.1.2/go.mod h1:XORrx8tyS5ZDcyUboCIxQtta/Aujk/6pfWrn9Xe33mU= -gopkg.in/guregu/null.v4 v4.0.0 h1:1Wm3S1WEA2I26Kq+6vcW+w0gcDo44YKYD7YIEJNHDjg= -gopkg.in/guregu/null.v4 v4.0.0/go.mod h1:YoQhUrADuG3i9WqesrCmpNRwm1ypAgSHYqoOcTu/JrI= -gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= -gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -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= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q= -gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -modernc.org/libc v1.72.0 h1:IEu559v9a0XWjw0DPoVKtXpO2qt5NVLAnFaBbjq+n8c= -modernc.org/libc v1.72.0/go.mod h1:tTU8DL8A+XLVkEY3x5E/tO7s2Q/q42EtnNWda/L5QhQ= -modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= -modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= -modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI= -modernc.org/memory v1.11.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= -modernc.org/sqlite v1.49.1 h1:dYGHTKcX1sJ+EQDnUzvz4TJ5GbuvhNJa8Fg6ElGx73U= -modernc.org/sqlite v1.49.1/go.mod h1:m0w8xhwYUVY3H6pSDwc3gkJ/irZT/0YEXwBlhaxQEew= -nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= -nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= -pgregory.net/rapid v1.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk= -pgregory.net/rapid v1.2.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs= -sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4= -stathat.com/c/consistent v1.0.0 h1:ezyc51EGcRPJUxfHGSgJjWzJdj3NiMU9pNfLNGiXV0c= -stathat.com/c/consistent v1.0.0/go.mod h1:QkzMWzcbB+yQBL2AttO6sgsQS/JSTapcDISJalmCDS0= diff --git a/integration_tests/http/gateway_config_test_helpers.go b/integration_tests/http/gateway_config_test_helpers.go deleted file mode 100644 index bb2dd5166..000000000 --- a/integration_tests/http/gateway_config_test_helpers.go +++ /dev/null @@ -1,122 +0,0 @@ -package http - -import ( - "encoding/json" - "strings" -) - -const testDonName = "test_don" - -type gatewayNode struct { - Name string `json:"Name"` - Address string `json:"Address"` -} - -func buildGatewayConfigJSON(authGatewayID string, f int, nodes []gatewayNode, handlerName string, handlerConfig json.RawMessage) string { - for i := range nodes { - nodes[i].Address = strings.ToLower(nodes[i].Address) - } - - cfg := map[string]any{ - "ConnectionManagerConfig": map[string]any{ - "AuthChallengeLen": 32, - "AuthGatewayId": authGatewayID, - "AuthTimestampToleranceSec": 30, - }, - "NodeServerConfig": map[string]any{ - "Path": "/node", - "Port": 0, - "HandshakeTimeoutMillis": 2000, - "MaxRequestBytes": 20000, - "ReadTimeoutMillis": 5000, - "RequestTimeoutMillis": 5000, - "WriteTimeoutMillis": 10000, - }, - "UserServerConfig": map[string]any{ - "Path": "/user", - "Port": 0, - "ContentTypeHeader": "application/jsonrpc", - "MaxRequestBytes": 20000, - "ReadTimeoutMillis": 5000, - "RequestTimeoutMillis": 5000, - "WriteTimeoutMillis": 10000, - }, - "ShardedDONs": []any{ - map[string]any{ - "DonName": testDonName, - "F": f, - "Shards": []any{ - map[string]any{"Nodes": nodes}, - }, - }, - }, - "Services": []any{ - map[string]any{ - "ServiceName": "workflows", - "DONs": []string{testDonName}, - "Handlers": []any{ - map[string]any{ - "Name": handlerName, - "ServiceName": "workflows", - "Config": handlerConfig, - }, - }, - }, - }, - } - - b, err := json.Marshal(cfg) - if err != nil { - panic(err) - } - return string(b) -} - -func buildHTTPActionGatewayConfig(authGatewayID, publicKey string) string { - return buildGatewayConfigJSON( - authGatewayID, - 1, - []gatewayNode{{Name: "test_node_1", Address: publicKey}}, - "http-capabilities", - json.RawMessage(`{ - "NodeRateLimiter": { - "GlobalBurst": 50, - "GlobalRPS": 50, - "PerSenderBurst": 50, - "PerSenderRPS": 50 - }, - "UserRateLimiter": { - "GlobalBurst": 50, - "GlobalRPS": 50, - "PerSenderBurst": 50, - "PerSenderRPS": 50 - } - }`), - ) -} - -func buildHTTPTriggerGatewayConfig(authGatewayID string, f int, nodes []gatewayNode) string { - return buildGatewayConfigJSON( - authGatewayID, - f, - nodes, - "http-capabilities", - json.RawMessage(`{ - "MaxTriggerRequestDurationMs": 5000, - "MetadataPullIntervalMs": 1000, - "MetadataAggregationIntervalMs": 1000, - "NodeRateLimiter": { - "GlobalBurst": 10, - "GlobalRPS": 50, - "PerSenderBurst": 10, - "PerSenderRPS": 10 - }, - "UserRateLimiter": { - "GlobalBurst": 10, - "GlobalRPS": 50, - "PerSenderBurst": 10, - "PerSenderRPS": 10 - } - }`), - ) -} diff --git a/integration_tests/http/http_action_routing_test.go b/integration_tests/http/http_action_routing_test.go deleted file mode 100644 index 82a3f2898..000000000 --- a/integration_tests/http/http_action_routing_test.go +++ /dev/null @@ -1,217 +0,0 @@ -package http - -import ( - "context" - "encoding/json" - "fmt" - "io" - "net" - "net/http" - "strings" - "testing" - - "github.com/BurntSushi/toml" - "github.com/ethereum/go-ethereum/crypto" - "github.com/google/uuid" - "github.com/jonboulle/clockwork" - "github.com/stretchr/testify/require" - - httpcap "github.com/smartcontractkit/capabilities/http_action/action" - - "github.com/smartcontractkit/chainlink-common/pkg/beholder" - "github.com/smartcontractkit/chainlink-common/pkg/capabilities" - caperrors "github.com/smartcontractkit/chainlink-common/pkg/capabilities/errors" - httpclient "github.com/smartcontractkit/chainlink-common/pkg/capabilities/v2/actions/http" - "github.com/smartcontractkit/chainlink-common/pkg/capabilities/v2/actions/http/server" - jsonrpc "github.com/smartcontractkit/chainlink-common/pkg/jsonrpc2" - "github.com/smartcontractkit/chainlink-common/pkg/logger" - "github.com/smartcontractkit/chainlink-common/pkg/services/servicetest" - "github.com/smartcontractkit/chainlink-common/pkg/settings" - "github.com/smartcontractkit/chainlink-common/pkg/settings/limits" - "github.com/smartcontractkit/chainlink-common/pkg/types/core" - "github.com/smartcontractkit/chainlink/v2/core/services/gateway/connector" -) - -const ( - multiDonTestOrgID = "multi-don-test-org" - gatewayDonUS = "gateway_don_us" - gatewayDonEU = "gateway_don_eu" -) - -const multiDonNodeConfigTemplate = ` -DonID = "%s" -AuthMinChallengeLen = 32 -AuthTimestampToleranceSec = 30 -NodeAddress = "%s" - -[WsClientConfig] -HandshakeTimeoutMillis = 2_000 - -[[Gateways]] -Id = "gateway_us" -DonId = "gateway_don_us" -URL = "%s" - -[[Gateways]] -Id = "gateway_eu" -DonId = "gateway_don_eu" -URL = "%s" -` - -type recordingGatewayConnector struct { - core.MultiGatewayConnector - lastGatewayID string -} - -func (r *recordingGatewayConnector) SendToGateway(ctx context.Context, gatewayID string, resp *jsonrpc.Response[json.RawMessage]) error { - r.lastGatewayID = gatewayID - return r.MultiGatewayConnector.SendToGateway(ctx, gatewayID, resp) -} - -type multiDonRoutingEnv struct { - targetURL string - recordingConnector *recordingGatewayConnector - httpCapability server.ClientCapability - gatewayProxyDonID string -} - -func setupMultiDonRoutingEnv( - ctx context.Context, - t *testing.T, - lggr logger.Logger, - gatewayProxyDonID string, - usNodeURL string, - euNodeURL string, -) multiDonRoutingEnv { - t.Helper() - - mux := http.NewServeMux() - mux.HandleFunc("/routed", func(w http.ResponseWriter, r *http.Request) { - if _, err := io.WriteString(w, "routed"); err != nil { - t.Errorf("failed to write response: %v", err) - } - }) - - listener, cleanup := startTestHTTPServer(t, mux) - t.Cleanup(cleanup) - - privateKey, err := crypto.GenerateKey() - require.NoError(t, err) - publicKey := strings.ToLower(crypto.PubkeyToAddress(privateKey.PublicKey).Hex()) - - netClient := newTestNetworkClient(t, listener.Addr().(*net.TCPAddr), lggr) - gatewayUS := newTestGatewayFromConfig(t, buildHTTPActionGatewayConfig("gateway_us", publicKey), netClient, lggr) - gatewayEU := newTestGatewayFromConfig(t, buildHTTPActionGatewayConfig("gateway_eu", publicKey), netClient, lggr) - - if usNodeURL == "" { - usNodeURL = fmt.Sprintf("ws://localhost:%d/node", gatewayUS.GetNodePort()) - } - if euNodeURL == "" { - euNodeURL = fmt.Sprintf("ws://localhost:%d/node", gatewayEU.GetNodePort()) - } - - nodeConfig := fmt.Sprintf(multiDonNodeConfigTemplate, testDonName, publicKey, usNodeURL, euNodeURL) - var cfg connector.ConnectorConfig - require.NoError(t, toml.Unmarshal([]byte(nodeConfig), &cfg)) - - gc, err := connector.NewGatewayConnector(&cfg, &client{privateKey: privateKey}, clockwork.NewRealClock(), lggr) - require.NoError(t, err) - servicetest.Run(t, gc) - - multiGC, ok := any(gc).(core.MultiGatewayConnector) - require.True(t, ok, "gateway connector must implement multi-gateway routing") - recordingConnector := &recordingGatewayConnector{MultiGatewayConnector: multiGC} - - settingsGetter, err := settings.NewJSONGetter(fmt.Appendf(nil, `{ - "org": { - %q: { - "PerWorkflow": { - "HTTPAction": { - "GatewayProxyDonID": %q - } - } - } - } - }`, multiDonTestOrgID, gatewayProxyDonID)) - require.NoError(t, err) - - httpCapability := httpcap.NewService(lggr, limits.Factory{ - Logger: lggr, - Meter: beholder.GetMeter(), - Settings: settingsGetter, - }) - err = httpCapability.Initialise(ctx, core.StandardCapabilitiesDependencies{ - Config: serviceConfigTemplate, - GatewayConnector: recordingConnector, - }) - require.NoError(t, err) - - return multiDonRoutingEnv{ - targetURL: fmt.Sprintf("http://%s/routed", listener.Addr().String()), - recordingConnector: recordingConnector, - httpCapability: httpCapability, - gatewayProxyDonID: gatewayProxyDonID, - } -} - -func multiDonRequestMetadata() capabilities.RequestMetadata { - return capabilities.RequestMetadata{ - OrgID: multiDonTestOrgID, - WorkflowOwner: fmt.Sprintf("owner_%s", uuid.New().String()), - WorkflowID: fmt.Sprintf("workflow_%s", uuid.New().String()), - WorkflowExecutionID: fmt.Sprintf("execution_%s", uuid.New().String()), - } -} - -func assertRoutedThroughResolvedDon(ctx context.Context, t *testing.T, env multiDonRoutingEnv, wantGatewayPrefix string) { - t.Helper() - - output, err := env.httpCapability.SendRequest(ctx, multiDonRequestMetadata(), &httpclient.Request{ - Url: env.targetURL, - Method: "GET", - }) - require.NoError(t, err) - require.NotNil(t, output) - require.Equal(t, uint32(http.StatusOK), output.Response.StatusCode) - require.Equal(t, "routed", string(output.Response.Body)) - - require.NotEmpty(t, env.recordingConnector.lastGatewayID) - require.True(t, strings.HasPrefix(env.recordingConnector.lastGatewayID, wantGatewayPrefix)) - - gatewayDonID, donErr := env.recordingConnector.DonIDForGateway(ctx, env.recordingConnector.lastGatewayID) - require.NoError(t, donErr) - require.Equal(t, env.gatewayProxyDonID, gatewayDonID) -} - -func TestHTTPActionCapability_multiDonGatewayRouting(t *testing.T) { - ctx := t.Context() - lggr := logger.Test(t) - - t.Run("routes through US gateway when GatewayProxyDonID resolves to gateway_don_us", func(t *testing.T) { - env := setupMultiDonRoutingEnv(ctx, t, lggr, gatewayDonUS, "", "") - assertRoutedThroughResolvedDon(ctx, t, env, "gateway_us") - }) - - t.Run("routes through EU gateway when GatewayProxyDonID resolves to gateway_don_eu", func(t *testing.T) { - env := setupMultiDonRoutingEnv(ctx, t, lggr, gatewayDonEU, "", "") - assertRoutedThroughResolvedDon(ctx, t, env, "gateway_eu") - }) - - t.Run("does not route through other DON gateway when only matching gateway is reachable", func(t *testing.T) { - // setup so that only EU DON is reachable - env := setupMultiDonRoutingEnv(ctx, t, lggr, gatewayDonEU, "ws://127.0.0.1:1/node", "") - assertRoutedThroughResolvedDon(ctx, t, env, "gateway_eu") - - // Create new env with unreachable US DON -- expect failure - envUS := setupMultiDonRoutingEnv(ctx, t, lggr, gatewayDonUS, "ws://127.0.0.1:1/node", "") - _, err := envUS.httpCapability.SendRequest(ctx, multiDonRequestMetadata(), &httpclient.Request{ - Url: envUS.targetURL, - Method: "GET", - }) - require.Error(t, err) - - var capErr caperrors.Error - require.ErrorAs(t, err, &capErr) - require.Empty(t, envUS.recordingConnector.lastGatewayID) - }) -} diff --git a/integration_tests/http/http_test.go b/integration_tests/http/http_test.go deleted file mode 100644 index 9c7d41e72..000000000 --- a/integration_tests/http/http_test.go +++ /dev/null @@ -1,448 +0,0 @@ -package http - -import ( - "context" - "crypto/ecdsa" - "encoding/json" - "errors" - "fmt" - "io" - "net" - "net/http" - "strings" - "testing" - "time" - - "github.com/BurntSushi/toml" - "github.com/google/uuid" - "github.com/jonboulle/clockwork" - "github.com/stretchr/testify/require" - "google.golang.org/protobuf/types/known/durationpb" - - "github.com/smartcontractkit/chainlink/v2/core/services/gateway" - "github.com/smartcontractkit/chainlink/v2/core/services/gateway/config" - "github.com/smartcontractkit/chainlink/v2/core/services/gateway/connector" - "github.com/smartcontractkit/chainlink/v2/core/services/gateway/network" - - httpcap "github.com/smartcontractkit/capabilities/http_action/action" - - "github.com/smartcontractkit/chainlink-common/pkg/beholder" - "github.com/smartcontractkit/chainlink-common/pkg/capabilities" - "github.com/smartcontractkit/chainlink-common/pkg/logger" - "github.com/smartcontractkit/chainlink-common/pkg/services/servicetest" - "github.com/smartcontractkit/chainlink-common/pkg/settings/limits" - "github.com/smartcontractkit/chainlink-common/pkg/types/core" - - "github.com/ethereum/go-ethereum/crypto" - - httpclient "github.com/smartcontractkit/chainlink-common/pkg/capabilities/v2/actions/http" - "github.com/smartcontractkit/chainlink-common/pkg/capabilities/v2/actions/http/server" -) - -const EthSignedMessagePrefix = "\x19Ethereum Signed Message:\n" - -const nodeConfigTemplate = ` -DonID = "test_don" -AuthMinChallengeLen = 32 -AuthTimestampToleranceSec = 30 -NodeAddress = "%s" - -[WsClientConfig] -HandshakeTimeoutMillis = 2_000 - -[[Gateways]] -Id = "test_gateway" -URL = "%s" -` - -const serviceConfigTemplate = ` -{ - "proxyMode": "gateway" -} -` - -func startTestHTTPServer(t *testing.T, handler http.Handler) (net.Listener, func()) { - listener, err := net.Listen("tcp", "127.0.0.1:0") - require.NoError(t, err) - - srv := &http.Server{ - Handler: handler, - ReadHeaderTimeout: 5 * time.Second, - } - go func() { - err := srv.Serve(listener) - if err != nil && !errors.Is(err, http.ErrServerClosed) { - t.Logf("HTTP server error: %v", err) - } - }() - cleanup := func() { _ = srv.Close() } - return listener, cleanup -} - -func newTestNetworkClient(t *testing.T, addr *net.TCPAddr, lggr logger.Logger) network.HTTPClient { - c, err := network.NewHTTPClient(network.HTTPClientConfig{ - DefaultTimeout: 5 * time.Second, - MaxResponseBytes: 1000, - AllowedPorts: []int{addr.Port}, - AllowedIPs: []string{addr.IP.String()}, - }, lggr) - require.NoError(t, err) - return c -} - -func newTestGateway(t *testing.T, publicKey string, c network.HTTPClient, lggr logger.Logger) gateway.Gateway { - return newTestGatewayFromConfig(t, buildHTTPActionGatewayConfig("test_gateway", publicKey), c, lggr) -} - -func newTestGatewayFromConfig(t *testing.T, gatewayConfigStr string, c network.HTTPClient, lggr logger.Logger) gateway.Gateway { - var gatewayConfig *config.GatewayConfig - err := json.Unmarshal([]byte(gatewayConfigStr), &gatewayConfig) - require.NoError(t, err) - gateway, err := gateway.NewGatewayFromConfig(gatewayConfig, gateway.NewHandlerFactory(nil, nil, c, nil, nil, lggr, limits.Factory{Logger: lggr}, nil), lggr, limits.Factory{Logger: lggr}) - require.NoError(t, err) - servicetest.Run(t, gateway) - return gateway -} - -func parseConnectorConfig(t *testing.T, tomlConfig string, nodeAddress string, nodeURL string) *connector.ConnectorConfig { - nodeConfig := fmt.Sprintf(tomlConfig, nodeAddress, nodeURL) - var cfg connector.ConnectorConfig - require.NoError(t, toml.Unmarshal([]byte(nodeConfig), &cfg)) - return &cfg -} - -func newTestGatewayConnector(t *testing.T, publicKey, nodeURL string, signer connector.Signer, lggr logger.Logger) core.GatewayConnector { - cfg := parseConnectorConfig(t, nodeConfigTemplate, publicKey, nodeURL) - gc, err := connector.NewGatewayConnector(cfg, signer, clockwork.NewRealClock(), lggr) - require.NoError(t, err) - servicetest.Run(t, gc) - return gc -} - -// Helper to create and initialize the HTTP capability -func newTestHTTPCapability(ctx context.Context, t *testing.T, gc core.GatewayConnector, lggr logger.Logger) server.ClientCapability { - httpCapability := httpcap.NewService(lggr, limits.Factory{ - Logger: lggr, - Meter: beholder.GetMeter(), - }) - err := httpCapability.Initialise(ctx, core.StandardCapabilitiesDependencies{ - Config: serviceConfigTemplate, - GatewayConnector: gc, - }) - require.NoError(t, err) - return httpCapability -} - -// --- Test Client --- -type client struct { - privateKey *ecdsa.PrivateKey -} - -func (c *client) Sign(ctx context.Context, data ...[]byte) ([]byte, error) { - var msg []byte - for _, d := range data { - msg = append(msg, d...) - } - prefixedMsg := fmt.Sprintf("%s%d%s", EthSignedMessagePrefix, len(msg), msg) - hash := crypto.Keccak256Hash([]byte(prefixedMsg)) - return crypto.Sign(hash[:], c.privateKey) -} - -func (c *client) ID() (string, error) { - return "test_client", nil -} - -func (*client) Start(ctx context.Context) error { - return nil -} - -func (*client) Close() error { - return nil -} - -// --- Main Test --- - -func TestHTTPActionCapability(t *testing.T) { - ctx := t.Context() - lggr := logger.Test(t) - - mux := http.NewServeMux() - mux.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("X-Custom-Header", "my-value") - if _, err := io.WriteString(w, "pong"); err != nil { - t.Errorf("failed to write response: %v", err) - } - }) - // random endpoint to test response caching - mux.HandleFunc("/random", func(w http.ResponseWriter, r *http.Request) { - randomID := uuid.New().String() - w.Header().Set("X-Custom-Header", randomID) - if _, err := io.WriteString(w, randomID); err != nil { - t.Errorf("failed to write response: %v", err) - } - }) - // endpoint that returns a 404 error - notFoundCounter := 0 - mux.HandleFunc("/not-found", func(w http.ResponseWriter, r *http.Request) { - notFoundCounter++ - http.Error(w, "Not Found", http.StatusNotFound) - }) - // endpoint that returns a 500 error with counter - errorCounter := 0 - mux.HandleFunc("/error", func(w http.ResponseWriter, r *http.Request) { - errorCounter++ - http.Error(w, "Internal Server Error", http.StatusInternalServerError) - }) - // POST endpoint to test request handling - var postBody string - var postHeaders http.Header - mux.HandleFunc("/post", func(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodPost { - http.Error(w, "Method Not Allowed", http.StatusMethodNotAllowed) - return - } - postBodyBytes, err := io.ReadAll(r.Body) - if err != nil { - http.Error(w, "Bad Request", http.StatusBadRequest) - return - } - postBody = string(postBodyBytes) - postHeaders = r.Header - w.WriteHeader(http.StatusOK) - if _, err := io.WriteString(w, "Post received"); err != nil { - t.Errorf("failed to write response: %v", err) - } - }) - - listener, cleanup := startTestHTTPServer(t, mux) - t.Cleanup(cleanup) - addr := listener.Addr().(*net.TCPAddr) - - netClient := newTestNetworkClient(t, addr, lggr) - - privateKey, err := crypto.GenerateKey() - require.NoError(t, err) - publicKey := strings.ToLower(crypto.PubkeyToAddress(privateKey.PublicKey).Hex()) - gateway := newTestGateway(t, publicKey, netClient, lggr) - nodeURL := fmt.Sprintf("ws://localhost:%d/node", gateway.GetNodePort()) - - client := &client{privateKey: privateKey} - gc := newTestGatewayConnector(t, publicKey, nodeURL, client, lggr) - httpCapability := newTestHTTPCapability(ctx, t, gc, lggr) - t.Run("GET /test returns pong with custom header", func(t *testing.T) { - output, err := httpCapability.SendRequest(ctx, generateRandomRequestMetadata(), &httpclient.Request{ - Url: fmt.Sprintf("http://%s/test", listener.Addr().String()), - Method: "GET", - Headers: map[string]string{"X-Test": "1"}, - Body: []byte("ping"), - }) - require.NoError(t, err) - require.NotNil(t, output) - require.Equal(t, uint32(http.StatusOK), output.Response.StatusCode) - require.Equal(t, "pong", string(output.Response.Body)) - require.Equal(t, "my-value", output.Response.Headers["X-Custom-Header"]) - }) - - t.Run("POST /post with body and headers", func(t *testing.T) { - input := &httpclient.Request{ - Url: fmt.Sprintf("http://%s/post", listener.Addr().String()), - Method: "POST", - Headers: map[string]string{"X-Test": "1"}, - Body: []byte(`abc`), - } - output, err := httpCapability.SendRequest(ctx, generateRandomRequestMetadata(), input) - require.NoError(t, err) - require.NotNil(t, output) - require.Equal(t, uint32(http.StatusOK), output.Response.StatusCode) - require.Equal(t, "Post received", string(output.Response.Body)) - require.Equal(t, "1", postHeaders.Get("X-Test")) - require.Equal(t, "abc", postBody) - }) - - t.Run("GET /random with caching enabled", func(t *testing.T) { - requestMetadata := generateRandomRequestMetadata() - initialOutput, err := httpCapability.SendRequest(ctx, requestMetadata, &httpclient.Request{ - Url: fmt.Sprintf("http://%s/random", listener.Addr().String()), - Method: "GET", - CacheSettings: &httpclient.CacheSettings{ - Store: true, - }, - }) - require.NoError(t, err) - require.NotNil(t, initialOutput) - require.Equal(t, uint32(http.StatusOK), initialOutput.Response.StatusCode) - require.NotEmpty(t, initialOutput.Response.Body) - require.NotEmpty(t, initialOutput.Response.Headers["X-Custom-Header"]) - - cachedOutput, err := httpCapability.SendRequest(ctx, requestMetadata, &httpclient.Request{ - Url: fmt.Sprintf("http://%s/random", listener.Addr().String()), - Method: "GET", - CacheSettings: &httpclient.CacheSettings{ - MaxAge: durationpb.New(10000 * time.Millisecond), - }, - }) - require.NoError(t, err) - require.NotNil(t, cachedOutput) - require.Equal(t, uint32(http.StatusOK), cachedOutput.Response.StatusCode) - require.NotEmpty(t, cachedOutput.Response.Body) - require.NotEmpty(t, cachedOutput.Response.Headers["X-Custom-Header"]) - - freshOutput, err := httpCapability.SendRequest(ctx, requestMetadata, &httpclient.Request{ - Url: fmt.Sprintf("http://%s/random", listener.Addr().String()), - Method: "GET", - }) - require.NoError(t, err) - require.NotNil(t, freshOutput) - require.Equal(t, uint32(http.StatusOK), freshOutput.Response.StatusCode) - require.NotEmpty(t, freshOutput.Response.Body) - require.NotEmpty(t, freshOutput.Response.Headers["X-Custom-Header"]) - - require.Equal(t, initialOutput.Response.Body, cachedOutput.Response.Body) - require.Equal(t, initialOutput.Response.Headers["X-Custom-Header"], cachedOutput.Response.Headers["X-Custom-Header"]) - require.NotEqual(t, initialOutput.Response.Body, freshOutput.Response.Body) - require.NotEqual(t, initialOutput.Response.Headers["X-Custom-Header"], freshOutput.Response.Headers["X-Custom-Header"]) - }) - - t.Run("GET /not-found returns 404", func(t *testing.T) { - requestMetadata := generateRandomRequestMetadata() - output, err := httpCapability.SendRequest(ctx, requestMetadata, &httpclient.Request{ - Url: fmt.Sprintf("http://%s/not-found", listener.Addr().String()), - Method: "GET", - CacheSettings: &httpclient.CacheSettings{ - Store: true, - }, - }) - require.NoError(t, err) - require.NotNil(t, output) - require.Equal(t, uint32(http.StatusNotFound), output.Response.StatusCode) - require.Equal(t, string(output.Response.Body), "Not Found\n") - - cachedOutput, err := httpCapability.SendRequest(ctx, requestMetadata, &httpclient.Request{ - Url: fmt.Sprintf("http://%s/not-found", listener.Addr().String()), - Method: "GET", - CacheSettings: &httpclient.CacheSettings{ - Store: true, - MaxAge: durationpb.New(10000 * time.Millisecond), - }, - }) - require.NoError(t, err) - require.NotNil(t, cachedOutput) - require.Equal(t, uint32(http.StatusNotFound), cachedOutput.Response.StatusCode) - require.Equal(t, string(cachedOutput.Response.Body), "Not Found\n") - require.Equal(t, notFoundCounter, 1, "not-found endpoint should have been called once") - }) - - t.Run("GET /error returns 500", func(t *testing.T) { - output, err := httpCapability.SendRequest(ctx, generateRandomRequestMetadata(), &httpclient.Request{ - Url: fmt.Sprintf("http://%s/error", listener.Addr().String()), - Method: "GET", - CacheSettings: &httpclient.CacheSettings{ - Store: true, - }, - }) - require.NoError(t, err) - require.NotNil(t, output) - require.Equal(t, uint32(http.StatusInternalServerError), output.Response.StatusCode) - require.Equal(t, string(output.Response.Body), "Internal Server Error\n") - - cachedOutput, err := httpCapability.SendRequest(ctx, generateRandomRequestMetadata(), &httpclient.Request{ - Url: fmt.Sprintf("http://%s/error", listener.Addr().String()), - Method: "GET", - CacheSettings: &httpclient.CacheSettings{ - Store: true, - MaxAge: durationpb.New(10000 * time.Millisecond), - }, - }) - require.NoError(t, err) - require.NotNil(t, cachedOutput) - require.Equal(t, uint32(http.StatusInternalServerError), cachedOutput.Response.StatusCode) - require.Equal(t, string(cachedOutput.Response.Body), "Internal Server Error\n") - require.Equal(t, errorCounter, 2, "error endpoint should have been called twice. No caching on 500") - }) - - t.Run("Caching works across workflows for same owner", func(t *testing.T) { - workflow1Metadata := generateRandomRequestMetadata() - initialOutput, err := httpCapability.SendRequest(ctx, workflow1Metadata, &httpclient.Request{ - Url: fmt.Sprintf("http://%s/random", listener.Addr().String()), - Method: "GET", - CacheSettings: &httpclient.CacheSettings{ - Store: true, - }, - }) - require.NoError(t, err) - require.NotNil(t, initialOutput) - require.Equal(t, uint32(http.StatusOK), initialOutput.Response.StatusCode) - initialBody := string(initialOutput.Response.Body) - initialHeader := initialOutput.Response.Headers["X-Custom-Header"] - require.NotEmpty(t, initialBody) - require.NotEmpty(t, initialHeader) - - // Second request: different workflow ID but same owner, should retrieve from cache - workflow2Metadata := capabilities.RequestMetadata{ - WorkflowOwner: workflow1Metadata.WorkflowOwner, // Same owner - WorkflowID: "0x2222222222222222222222222222222222222222222222222222222222222222", - WorkflowExecutionID: fmt.Sprintf("execution_%s", uuid.New().String()), - } - - cachedOutput, err := httpCapability.SendRequest(ctx, workflow2Metadata, &httpclient.Request{ - Url: fmt.Sprintf("http://%s/random", listener.Addr().String()), - Method: "GET", - CacheSettings: &httpclient.CacheSettings{ - MaxAge: durationpb.New(10000 * time.Millisecond), - }, - }) - require.NoError(t, err) - require.NotNil(t, cachedOutput) - require.Equal(t, uint32(http.StatusOK), cachedOutput.Response.StatusCode) - - // Verify cached response matches the first response (same random UUID) - require.Equal(t, initialBody, string(cachedOutput.Response.Body), - "Cache should work across different workflows for the same owner") - require.Equal(t, initialHeader, cachedOutput.Response.Headers["X-Custom-Header"], - "Cached headers should match across different workflows for the same owner") - }) - - t.Run("Caching does not work across different workflow owners", func(t *testing.T) { - owner1Metadata := generateRandomRequestMetadata() - firstOutput, err := httpCapability.SendRequest(ctx, owner1Metadata, &httpclient.Request{ - Url: fmt.Sprintf("http://%s/random", listener.Addr().String()), - Method: "GET", - CacheSettings: &httpclient.CacheSettings{ - Store: true, - }, - }) - require.NoError(t, err) - require.NotNil(t, firstOutput) - require.Equal(t, uint32(http.StatusOK), firstOutput.Response.StatusCode) - firstBody := string(firstOutput.Response.Body) - firstHeader := firstOutput.Response.Headers["X-Custom-Header"] - require.NotEmpty(t, firstBody) - require.NotEmpty(t, firstHeader) - - owner2Metadata := generateRandomRequestMetadata() - secondOutput, err := httpCapability.SendRequest(ctx, owner2Metadata, &httpclient.Request{ - Url: fmt.Sprintf("http://%s/random", listener.Addr().String()), - Method: "GET", - CacheSettings: &httpclient.CacheSettings{ - MaxAge: durationpb.New(10000 * time.Millisecond), - }, - }) - require.NoError(t, err) - require.NotNil(t, secondOutput) - require.Equal(t, uint32(http.StatusOK), secondOutput.Response.StatusCode) - - // Verify different response (fresh request, not cached) - require.NotEqual(t, firstBody, string(secondOutput.Response.Body), - "Cache should NOT work across different workflow owners - should get fresh response") - require.NotEqual(t, firstHeader, secondOutput.Response.Headers["X-Custom-Header"], - "Headers should be different for different workflow owners - not from cache") - }) -} - -func generateRandomRequestMetadata() capabilities.RequestMetadata { - return capabilities.RequestMetadata{ - WorkflowOwner: fmt.Sprintf("owner_%s", uuid.New().String()), - WorkflowID: fmt.Sprintf("workflow_%s", uuid.New().String()), - WorkflowExecutionID: fmt.Sprintf("execution_%s", uuid.New().String()), - } -} diff --git a/integration_tests/http/http_trigger_test.go b/integration_tests/http/http_trigger_test.go deleted file mode 100644 index 2a31a1305..000000000 --- a/integration_tests/http/http_trigger_test.go +++ /dev/null @@ -1,388 +0,0 @@ -package http - -import ( - "context" - "crypto/ecdsa" - "crypto/rand" - "encoding/hex" - "encoding/json" - "fmt" - "io" - "net/http" - "strings" - "testing" - "time" - - "github.com/ethereum/go-ethereum/crypto" - "github.com/google/uuid" - "github.com/stretchr/testify/require" - - jsonrpc "github.com/smartcontractkit/chainlink-common/pkg/jsonrpc2" - "github.com/smartcontractkit/chainlink-common/pkg/settings/limits" - - triggercap "github.com/smartcontractkit/capabilities/http_trigger/trigger" - - "github.com/smartcontractkit/chainlink/v2/core/services/gateway" - "github.com/smartcontractkit/chainlink/v2/core/utils" - - "github.com/smartcontractkit/chainlink-common/pkg/capabilities" - triggersdk "github.com/smartcontractkit/chainlink-common/pkg/capabilities/v2/triggers/http" - "github.com/smartcontractkit/chainlink-common/pkg/capabilities/v2/triggers/http/server" - "github.com/smartcontractkit/chainlink-common/pkg/logger" - "github.com/smartcontractkit/chainlink-common/pkg/types/core" - gateway_common "github.com/smartcontractkit/chainlink-common/pkg/types/gateway" - "github.com/smartcontractkit/chainlink-common/pkg/workflows" -) - -// Workflow reference constants for testing -const ( - workflowOwner = "0x1234567890123456789012345678901234567890" - workflowName = "test-workflow" - workflowTag = "production" -) - -// generateWorkflowID generates a random 32-byte hex workflow ID with 0x prefix -func generateWorkflowID(t *testing.T) string { - bytes := make([]byte, 32) - _, err := rand.Read(bytes) - require.NoError(t, err) - return "0x" + hex.EncodeToString(bytes) -} - -func nodeKeys(t *testing.T, numNodes int) []*ecdsa.PrivateKey { - var keys []*ecdsa.PrivateKey - for range numNodes { - privateKey, err := crypto.GenerateKey() - require.NoError(t, err) - keys = append(keys, privateKey) - } - return keys -} - -type testEnv struct { - lggr logger.Logger - numNodes int - numFaultyNodes int - nodeKeys []*ecdsa.PrivateKey - signingKey *ecdsa.PrivateKey - gateway gateway.Gateway - nodeURL string - userURL string - workflowID string - triggerCaps []server.HTTPCapability - triggerChs []<-chan capabilities.TriggerAndId[*triggersdk.Payload] -} - -func setupTestEnv(t *testing.T, numHonestNodes int, numFaultyNodes int) *testEnv { - ctx := t.Context() - lggr := logger.Test(t) - nodeKeys := nodeKeys(t, numHonestNodes+numFaultyNodes) - signingKey, err := crypto.GenerateKey() - require.NoError(t, err) - - nodes := make([]gatewayNode, len(nodeKeys)) - for i, key := range nodeKeys { - nodes[i] = gatewayNode{ - Name: fmt.Sprintf("test_node_%d", i), - Address: crypto.PubkeyToAddress(key.PublicKey).Hex(), - } - } - - gatewayConfigStr := buildHTTPTriggerGatewayConfig("test_gateway", 1, nodes) - gateway := newTestGatewayFromConfig(t, gatewayConfigStr, nil, lggr) - nodeURL := fmt.Sprintf("ws://localhost:%d/node", gateway.GetNodePort()) - userURL := fmt.Sprintf("http://localhost:%d/user", gateway.GetUserPort()) - workflowID := generateWorkflowID(t) - - var triggerCaps []server.HTTPCapability - var triggerChs []<-chan capabilities.TriggerAndId[*triggersdk.Payload] - for i := range numHonestNodes { - triggerCap, ch := newTriggerHTTPCapability(ctx, t, nodeURL, nodeKeys[i], signingKey, workflowID, lggr) - triggerCaps = append(triggerCaps, triggerCap) - triggerChs = append(triggerChs, ch) - } - return &testEnv{ - lggr: lggr, - numNodes: numHonestNodes, - numFaultyNodes: numFaultyNodes, - nodeKeys: nodeKeys, - signingKey: signingKey, - gateway: gateway, - nodeURL: nodeURL, - userURL: userURL, - workflowID: workflowID, - triggerCaps: triggerCaps, - triggerChs: triggerChs, - } -} - -func createSampleRequest(t *testing.T, url string, key *ecdsa.PrivateKey, workflow gateway_common.WorkflowSelector, requestID string) (*http.Request, string, map[string]any) { - input := make(map[string]any) - input["key"] = "value" - input["count"] = 5.0 - marshalledInput, err := json.Marshal(input) - require.NoError(t, err) - rawInput := json.RawMessage(marshalledInput) - - req := jsonrpc.Request[gateway_common.HTTPTriggerRequest]{ - Version: jsonrpc.JsonRpcVersion, - ID: requestID, - Method: gateway_common.MethodWorkflowExecute, - Params: &gateway_common.HTTPTriggerRequest{ - Workflow: workflow, - Input: rawInput, - }, - } - payloadBytes, err := json.Marshal(req) - require.NoError(t, err) - payload := string(payloadBytes) - unsignedToken, err := utils.CreateRequestJWT(req) - require.NoError(t, err) - signedToken, err := unsignedToken.SignedString(key) - require.NoError(t, err) - httpReq, err := http.NewRequestWithContext(t.Context(), http.MethodPost, url, strings.NewReader(payload)) - require.NoError(t, err) - httpReq.Header.Set("Content-Type", "application/json") - httpReq.Header.Set("Authorization", fmt.Sprintf("Bearer %s", signedToken)) - return httpReq, requestID, input -} - -func sampleRequest(t *testing.T, url string, key *ecdsa.PrivateKey, workflowID string) (*http.Request, string, map[string]any) { - workflow := gateway_common.WorkflowSelector{ - WorkflowID: workflowID, - } - return createSampleRequest(t, url, key, workflow, uuid.New().String()) -} - -func sampleRequestWithReference(t *testing.T, url string, key *ecdsa.PrivateKey) (*http.Request, string, map[string]any) { - workflow := gateway_common.WorkflowSelector{ - WorkflowOwner: workflowOwner, - WorkflowName: workflowName, - WorkflowTag: workflowTag, - } - return createSampleRequest(t, url, key, workflow, uuid.New().String()) -} - -func sampleRequestWithoutPrefix(t *testing.T, url string, key *ecdsa.PrivateKey, workflowID string) (*http.Request, string, map[string]any) { - // Strip 0x prefix from workflowID to test normalization - workflowIDWithoutPrefix := strings.TrimPrefix(workflowID, "0x") - workflow := gateway_common.WorkflowSelector{ - WorkflowID: workflowIDWithoutPrefix, - } - return createSampleRequest(t, url, key, workflow, uuid.New().String()) -} - -func sampleRequestWithReferenceWithoutPrefix(t *testing.T, url string, key *ecdsa.PrivateKey) (*http.Request, string, map[string]any) { - // Strip 0x prefix from workflowOwner to test normalization - workflowOwnerWithoutPrefix := strings.TrimPrefix(workflowOwner, "0x") - workflow := gateway_common.WorkflowSelector{ - WorkflowOwner: workflowOwnerWithoutPrefix, - WorkflowName: workflowName, - WorkflowTag: workflowTag, - } - return createSampleRequest(t, url, key, workflow, uuid.New().String()) -} - -func TestHTTPTrigger(t *testing.T) { - t.Run("WithWorkflowID", func(t *testing.T) { - testHTTPTriggerWithWorkflowID(t) - }) - - t.Run("WithWorkflowReference", func(t *testing.T) { - testHTTPTriggerWithWorkflowReference(t) - }) - - t.Run("WithWorkflowIDWithoutPrefix", func(t *testing.T) { - testHTTPTriggerWithWorkflowIDWithoutPrefix(t) - }) - - t.Run("WithWorkflowReferenceWithoutPrefix", func(t *testing.T) { - testHTTPTriggerWithWorkflowReferenceWithoutPrefix(t) - }) - - t.Run("RequestDeduplication", func(t *testing.T) { - testHTTPTriggerRequestDeduplication(t) - }) -} - -func TestHTTPTrigger_InsufficientNodes(t *testing.T) { - // 2 honest nodes and 1 faulty node - // f + 1 = 2 is enough for workflow metadata aggregation - // (f + n) // 2 + 1 = 3 is required for consensus - // 2 honest nodes is not enough to reach consensus - env := setupTestEnv(t, 2, 1) - var requestID string - var req *http.Request - var input map[string]any - require.Eventually(t, func() bool { - req, requestID, input = sampleRequest(t, env.userURL, env.signingKey, env.workflowID) - resp, err := http.DefaultClient.Do(req) - require.NoError(t, err) - defer resp.Body.Close() - _, err = io.ReadAll(resp.Body) - require.NoError(t, err) - return resp.StatusCode == http.StatusServiceUnavailable - }, 30*time.Second, time.Second) - assertTriggerPayload(t, env, requestID, input) // workflows are still triggered even if not all nodes are available -} - -// requestGeneratorFunc is a function type that generates a request given a test environment -type requestGeneratorFunc func(t *testing.T, env *testEnv) (*http.Request, string, map[string]any) - -// runHTTPTriggerTest is a helper function that runs a standard HTTP trigger test with the given request generator -func runHTTPTriggerTest(t *testing.T, reqGen requestGeneratorFunc) { - f := 1 - numNodes := 3*f + 1 - env := setupTestEnv(t, numNodes, 0) - var req *http.Request - var requestID string - var input map[string]any - var body []byte - require.Eventually(t, func() bool { - req, requestID, input = reqGen(t, env) - resp, err := http.DefaultClient.Do(req) - require.NoError(t, err) - defer resp.Body.Close() - body, err = io.ReadAll(resp.Body) - require.NoError(t, err) - return resp.StatusCode == http.StatusOK - }, 30*time.Second, time.Second) - - validateHTTPTriggerResponse(t, body, requestID, env.workflowID) - assertTriggerPayload(t, env, requestID, input) -} - -func testHTTPTriggerWithWorkflowID(t *testing.T) { - runHTTPTriggerTest(t, func(t *testing.T, env *testEnv) (*http.Request, string, map[string]any) { - return sampleRequest(t, env.userURL, env.signingKey, env.workflowID) - }) -} - -func testHTTPTriggerWithWorkflowReference(t *testing.T) { - runHTTPTriggerTest(t, func(t *testing.T, env *testEnv) (*http.Request, string, map[string]any) { - return sampleRequestWithReference(t, env.userURL, env.signingKey) - }) -} - -func testHTTPTriggerWithWorkflowIDWithoutPrefix(t *testing.T) { - runHTTPTriggerTest(t, func(t *testing.T, env *testEnv) (*http.Request, string, map[string]any) { - return sampleRequestWithoutPrefix(t, env.userURL, env.signingKey, env.workflowID) - }) -} - -func testHTTPTriggerWithWorkflowReferenceWithoutPrefix(t *testing.T) { - runHTTPTriggerTest(t, func(t *testing.T, env *testEnv) (*http.Request, string, map[string]any) { - return sampleRequestWithReferenceWithoutPrefix(t, env.userURL, env.signingKey) - }) -} - -func testHTTPTriggerRequestDeduplication(t *testing.T) { - f := 1 - numNodes := 3*f + 1 - env := setupTestEnv(t, numNodes, 0) - - requestID := uuid.New().String() - - workflow := gateway_common.WorkflowSelector{ - WorkflowID: env.workflowID, - } - - // Make the first request - request, _, input := createSampleRequest(t, env.userURL, env.signingKey, workflow, requestID) - - var body []byte - require.Eventually(t, func() bool { - resp, err := http.DefaultClient.Do(request) - require.NoError(t, err) - defer resp.Body.Close() - body, err = io.ReadAll(resp.Body) - require.NoError(t, err) - return resp.StatusCode == http.StatusOK - }, 30*time.Second, time.Second) - - validateHTTPTriggerResponse(t, body, requestID, env.workflowID) - assertTriggerPayload(t, env, requestID, input) - - request, _, _ = createSampleRequest(t, env.userURL, env.signingKey, workflow, requestID) - resp, err := http.DefaultClient.Do(request) - require.NoError(t, err) - defer resp.Body.Close() - body, err = io.ReadAll(resp.Body) - require.NoError(t, err) - require.Equal(t, http.StatusOK, resp.StatusCode) - - validateHTTPTriggerResponse(t, body, requestID, env.workflowID) - - // This request should be deduplicated, so no new triggers should be sent to the nodes - for i, ch := range env.triggerChs { - require.Equal(t, 0, len(ch), "Node %d should not have received any new trigger payloads due to deduplication", i) - } -} - -// validateHTTPTriggerResponse validates the HTTP response and returns the execution ID for further assertions -func validateHTTPTriggerResponse(t *testing.T, body []byte, requestID string, expectedWorkflowID string) { - var respBody jsonrpc.Response[gateway_common.HTTPTriggerResponse] - err := json.Unmarshal(body, &respBody) - require.NoError(t, err) - require.Equal(t, requestID, respBody.ID) - require.Equal(t, gateway_common.HTTPTriggerStatusAccepted, respBody.Result.Status) - - require.NotEmpty(t, respBody.Result.WorkflowID) - workflowIDFromResponse := respBody.Result.WorkflowID - require.Equal(t, expectedWorkflowID, workflowIDFromResponse) - - executionID, err := workflows.EncodeExecutionID(strings.TrimPrefix(workflowIDFromResponse, "0x"), requestID) //nolint:staticcheck // SA1019 legacy execution ID path - require.NoError(t, err) - require.Equal(t, "0x"+executionID, respBody.Result.WorkflowExecutionID) -} - -func assertTriggerPayload(t *testing.T, env *testEnv, requestID string, expectedInput map[string]any) { - for i, ch := range env.triggerChs { - select { - case payload := <-ch: - require.NotNil(t, payload) - require.Equal(t, requestID, payload.Id) - var actualInput map[string]any - err := json.Unmarshal(payload.Trigger.Input, &actualInput) - require.NoError(t, err) - require.Equal(t, expectedInput, actualInput) - require.Equal(t, triggersdk.KeyType_KEY_TYPE_ECDSA_EVM, payload.Trigger.Key.Type) - publicKey := strings.ToLower(crypto.PubkeyToAddress(env.signingKey.PublicKey).Hex()) - require.Equal(t, publicKey, payload.Trigger.Key.PublicKey) - case <-time.After(1 * time.Minute): - t.Fatalf("Node %d did not receive a trigger within 1 minute", i) - } - } -} - -func newTriggerHTTPCapability(ctx context.Context, t *testing.T, nodeURL string, privateKey *ecdsa.PrivateKey, signingKey *ecdsa.PrivateKey, workflowID string, lggr logger.Logger) (server.HTTPCapability, <-chan capabilities.TriggerAndId[*triggersdk.Payload]) { - publicKey := strings.ToLower(crypto.PubkeyToAddress(privateKey.PublicKey).Hex()) - client := &client{privateKey: privateKey} - gc := newTestGatewayConnector(t, publicKey, nodeURL, client, lggr) - triggerCap := triggercap.NewService(lggr, limits.Factory{Logger: lggr}) - kvStore := newTestKeyValueStore() - err := triggerCap.Initialise(ctx, core.StandardCapabilitiesDependencies{ - Config: "", - Store: kvStore, - GatewayConnector: gc, - }) - require.NoError(t, err) - ch, err := triggerCap.RegisterTrigger(ctx, "trigger-id", capabilities.RequestMetadata{ - WorkflowID: workflowID, - WorkflowName: hex.EncodeToString([]byte(workflows.HashTruncateName(workflowName))), - WorkflowOwner: workflowOwner, - WorkflowTag: workflowTag, - }, &triggersdk.Config{ - AuthorizedKeys: []*triggersdk.AuthorizedKey{ - { - PublicKey: strings.ToLower(crypto.PubkeyToAddress(signingKey.PublicKey).Hex()), - Type: triggersdk.KeyType_KEY_TYPE_ECDSA_EVM, - }, - }, - }) - require.NoError(t, err) - require.Eventually(t, func() bool { - return triggerCap.Ready() == nil - }, 30*time.Second, time.Second) - return triggerCap, ch -} diff --git a/integration_tests/http/kvstore.go b/integration_tests/http/kvstore.go deleted file mode 100644 index cb50c47e1..000000000 --- a/integration_tests/http/kvstore.go +++ /dev/null @@ -1,44 +0,0 @@ -package http - -import ( - "context" - "fmt" - "sync" - "time" - - "github.com/smartcontractkit/chainlink-common/pkg/types/core" -) - -type testKeyValueStore struct { - mu sync.RWMutex - data map[string][]byte -} - -func newTestKeyValueStore() *testKeyValueStore { - return &testKeyValueStore{ - data: make(map[string][]byte), - } -} - -func (s *testKeyValueStore) Store(ctx context.Context, key string, val []byte) error { - s.mu.Lock() - defer s.mu.Unlock() - s.data[key] = val - return nil -} - -func (s *testKeyValueStore) Get(ctx context.Context, key string) ([]byte, error) { - s.mu.RLock() - defer s.mu.RUnlock() - value, exists := s.data[key] - if !exists { - return nil, fmt.Errorf("key not found: %s", key) - } - return value, nil -} - -func (s *testKeyValueStore) PruneExpiredEntries(ctx context.Context, maxAge time.Duration) (int64, error) { - return 0, nil -} - -var _ core.KeyValueStore = (*testKeyValueStore)(nil) diff --git a/integration_tests/integrationtestsdiagram.png b/integration_tests/integrationtestsdiagram.png deleted file mode 100644 index d6d0c492047de8abe6c8e6ff698b58e1afc13d89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 277297 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⋙0FJn#%v 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 HgS zUS4-#%{*wjYQDJ0PWQSz>}UP?1taAx<0DK-d4n?#eo*pNc+=bY164+j(;T&jNHm(3 zgF^ykS(+SbK2`Xx0LjVHR1>zqVINXC#g;Y@f?_#$p555hhc-&n5{0Wve-eg+xW7^- z^M--xefgdnQ;TL|}>7?_STI6LZiDMl| zafG!wP2o-5Z zsL&Pzfo2mwVqF|nW~IIZ%d<-Fq3#6+#>u$bF&SUiZ}wA$1ZSZ64|wxGxK~UQx)FZ& z`2~Z^R4Lm^t|+;EadTR1uKTh~_`aVD;FElV3u95Q2)2t%Ykg5t$G?Tw8qRt5Oxz)$ z`bZjzzW~9aV5+Ibq7?61u&9?8@k5!N&4PEIK}W6h7NJ10F4 zR~0H5dssQ6NGK9w!)XEQS>?HcyULW589?SiB@^AY9Dtmwg~YV;osdi!d&8HxThfD9 zkt`#)L-jGm{+i;ia)&L^*;eHdq2h6BJuPEF5B_Kn@P6JmPO^9KMiCD|Vv~}Z#5V36 z`%99cvo)LO98QPs?NKqHIy0fl>%N$FA;)sn`K+l6iK$2-c2gMEcH04;ho!cx2Ir3V zp&@wS_iaEgXmzj_DKuVZ&X1JW6o(%qgf$Zeu?EV*zPX`l@)JdVXqN&j=vEUJm%-$` zkX4@vHw`&sErjne?yiT+@9cCvNsJP)v^NG=bS=-ESkf>6(tdqf|W*U z%}*>+?P@4j>U|NXu_Pmc@&aKZUbQ;Kl8SOi)3da0g?_Mh0A?gZh*hFNVDoj2oJW5V z-|OR6Q6+h`gO_lcDooeuHGz#c$_jxzFF`MR{;3B#n^bzO;j{&t#f2-9^w4jkCv*BVfz*=3fTgA+t8yUX9;7Q;^LJY6XOkt4 zU3}dJI-tQl30mumgA!>OGp(hVapQtxn7ynKb_$Z60sj~Yk-VMZcUfleS{Qy3vDqZi zk+3|KB^Y7WnO0&-6QV~&m`RmC32AbR$yEo9^|K5uF!gDgkbEHmm|waaTn%nD+h$0H zIy?XGYpG4vF11kQ_q`GBr|p_m-DQ7XBF1hgyRX^1jy= zLt*_mp0JzSyL`W98yM^Hdaa zUVmkt^8aQ!S(FWWe$tMWshF9s>MJUiUA`>ZqH-~1+Q|R=E)riazJ44{!<>fEBo==E zn?_Sv7EH`d9=bDXILy_WT=E$~&NZf7pxLRMr}Xof!aZ=lej82g-RgZ8q05D!8Yg8? z*2g()xE>7*-ADwy=AOz3We_Qbw0k_&Xlk?E+UgX>wkv5Yj(R3l4K9cAQGi(*6h=2p z$7TJFF#=-OuUhp;?t7@eS5NboSBe#HYpgrhq^X*NsNL@q^ZnQfrLjs5bUJ0>*?vJL zq|PL)H=2iilc$_Dvk!T=@NhFd#p!d<|Ct%MeW?FCxEcK<<}y1w9TY7q7*_*2*sc+| zMzfyn#+u!MbT~!q0H%Hsm6F;bwA$3(bxj9u(pM1*(lg9Fn`8ffjxw(Q{Zw?nSMo~? zL)i)wrLqC-agDm+PI}vWKvMa$bYYB&*8o0~g57cYx5uOBF$kA$k@l{1D!g?P|9B~T z^HP`He-s-p2obPSdol1ct zU8oUoHOoJ|mBgJo-d?X(Gd?Pl=!3eoN9#840Ia>}yI8PR7 zrIqFpUGzwWQ!5iHX)5g2p7hNX+fsM^w0O@x|?#SKhH!cUux3O8fmQy8EQL*w* z`0N;?vU{rEpcX`I;3b4TebkFmxAt5kfbK{4XEv}kU5`K{i*NZajViFl-xfn27vrfr zFOxxC&S~CSCM`7TwIA2a1*9G#c8i3qX-8>B!G{8WR=zl@O!AQBOexvR1d8Pk`;|m&gmATb?trRP#dzaT6-X%mL zO+iAXnZ5_B>k>QZQqW=rr_)}2#o->)nvKe`LW2{@Gv zF4j91H@e??>L(eYLL|>fS#Oiq-c?&@$(3C-G_(Lp#4J^^=PDeU8SdhCeZG;_;N=Z6 zTM}iXpZScrmDIEx0lRuaTNp5@2xpKJfw%w+MCByFSp9#9=Jds~TDo6s<$$}1iuxJ} zOu7eabay;J`z@HdlD%$l(0mRbo&S5S=lI`&jWgp|OaIjS%_slPGuqhO$+GUh3b{1~vPTZos_ZHuH zYSEF!X)4M66&VtFU|uXKeRQ#L8rLQn0R9?j|AaZm&({LyVZ{Z{q`uP1!nc3q>a#Q+ zE7{JNo#6UyS9wUPWxn57S zG($@Lo?osM(TPSOWc+(2==tB3K;UKh9&gN}^R0vBwBT68h;}eFp6;6 z9bq*BmAFFgikt>@15h;0uWelxc{um9KQOoBSk67ntzIb{9@J;uDZdfR+?cEGOL@0b z)o9V5U$yYt*wF`_jb;8Qrl{)tROr~7_s`dp$J@JKNUPK$UN5W*?#~_r{i|%^6H`tg z#WYbQ%5bwsp$w}wwZU$dC4;i?^c?=2+!$ro+#UHOzIL;@rr~T$=M%xBo#*=r-Bo*) zPB4orWY{Zmea?%R*?~Yy@-ncaR~0J#xeg>*k<1~vd(HkqX>xF4@q(i#mfTK5dPuOL z*Fd;^oVDKXuVEK*_gKDb9{W^dulTP~j1F07a;v{W@){34;r#T25sCb%s)HTf&kO-s z(4m6>8p8j1!o!bxUoF$(we-NGj)!@_p4#z|W&_BHcv$_j0KKH*6oi-f9=g7vPry2F z{c?{6%BGDPM9Ox0vlwawzxjb-qEE7!_wPuF=F@0HkGoU=e;%BJT@&!8_! zB4ps@;;)Y-`+E58!pR`lzrIpXulOZ4r|x@gWNA9={TMTPzcScpb2#XF@>8`+^YzK- z-F>ooU}@bwy#ej~;#*Rxvgfd(u;2d9Y2S^CUG~{ z6w1i4S`_Upj5i!!JH}Y)aqrokoU8{}2!6TfPHfF!m^lPRNlTLR1u^8)-42Aht$N{1 z_NzfonvV1JgK-5Q1{cb)(Kg+d0O)KTcygQ;z4MlvU+FlOAKX9BOodsQ{>(MDNamZ2 z5E+{RVpYXQ`&{$q1d#01us6c*!ungnehv%E{`Zy@=W~gN#yn27HY8Mh%aXIRGuS+vgUw3XSUE4OgbpTK(;`Qn!sa8?v&~kDs<5U z457|Ptl9!fMH2pa4rW?5tkBQbm*X@oc4Sc4v!{f`SjW5@N%*y_HHUrA2hR>x zXs#TQm?J6+_Do}&^&(gwlDSP|w&v>{>D_+K{3Prl8-6+NY!Gobhp5dtHsw_%~HY`@I{pK6@Y~v64ErzjL zM)v+3Ab|vlaIlu?8$mEv&*=f~0N*4Zpj+#u-Q@j0CNwM?4b{O}db#@>$&T7pE*I4n z^Pl?5j1w)x7hN-$%noMl4GEL1yND6IYjwuMDG19pu%@TTP=JlA`C_cj4LW5;Sb!`! z5LEuL8G-DTz|gLaCE#l%uN%=Ef+)Z37S;4Isa+}4E;@SpS}jz%Dy))l$hx_U!>Np6 zc(uN4E3bpIoHk~4W)@9TTsqf91BPF2@1R3`pPZ5+Qd{1dR_|1~wFwfV4p`2_Ue=wE zP7CJS%x9d!1bfmA5>t-% zhPTz5>+1~qZ~-fo)BM4a(G^hKS+yT&NDP@8xynKD^_fPdAL_b;dNNE)x<)hAMqQy? zx3jLtK3ycoOJ=-TP)mhZmKMx9bQp(iVquxwpMLZ_0nK<+fiP-loIh`*`&=GXxki;) zsX-8iD_{rB;{j5a;C^*6T~(5fQENy&(6kEb0QG)0i-J}557|Nna2qlBbLH>4w?jRK zNlkB}Kutf@{}?bFk{9K6TS|#t9jVtNERpV1kHp}m561V$6@}-87*5x9W^(2@hXwFW z@KH5uZ47Ne;+V!Zi#K*YGc>defQ_Z6>58~_YgHYfVB5u7W#G`^_wW|1jgc06`B_Jg z`HR^If#D|25>JQU#aIlk?ggLo@yDZ!?c&+fE-@6^_XIR0Bq{b2YKZAA;oVV3X@V1m z*GWVs_34oRa#Gz}I@Rp@sKS{E9X!i{stS41^xT*cAA%P--A zV;5p9GD%q(rB!3~VU-+LybogcSP4Csa6a6of#w2L#%R>@Acfa9o9@r?yDm~28LgSA z3X@249Jh_eKP*{|<-*3Y!ni>O8JBxcBX1D z*qrakNKtI9)L5_Vl(Sjvp|(C0dqwp)S|Db`TRu%1?ca53*O$48P+w*jVYYYs>Yu)t zidJ>WrRG1^d zEKhA6|JoacRkL;>Bx^46=v$|jK(%fXXMSGaDD?r}5{Ob$a|8X+*0jOB+$NXXF$&%& zky7z0`R@&7joai6wCAknt27BW!)c_{+txK&-xt6>^dGWLioxT<>i2%asN&z~V@Go# zUZ&dgJ&k9I$BoB-{j#-+3QA=9dE7r4xm5iHO+AGGSEuu(8U{nS2k4dZtl zMX_RKYTLn&cd+>)vCyR|GMo9wG0`~8JjyxC09H)E8(nf_}qE3ieLy-P{;rGcjJ z{Jm8Z-B{@yo(aEtsv4sR;jqAwJjlpMvH>9Okn)4{P;Qd#%EUb}bT;S=UETqnZeJZ1 zL_~l+-Mm$rg99`7`)a8-z5YK6s@19{-Ge;rx6EHNEK?2h-t&)MBQV%vCO8cH1q^F3V53Io5)c*aXGk)`eZk7i|-}Ow&mm`$EVhu%ppc*>PG^ zN1)ze>MBLI+85=Sm7a9xqeOYUg5ud>AHUJ{GmgEcY}S6gtI5rr_hMBee7N~rv=(Cv z8QF3`{V6vwPrQHmK08^_rUBXmQp0{xI8~R0R#y~U(;rtCVW#>WHjP%;w#KIxUIAH2 zka?#PLgF8bg7wy>uu*=KieKJpz6|`LG%A)FF1IwDMXWnt<|zlu)Et@_FJWfS&5<||6SAT;RVnw8|q zZ0lf5LjgM5d-lE>&ornS+2gxZP9RUw%!5)9j0#u?wT)-z;C?ffA9joc(=g0|jtupF z{AuX3nP!jX#@Mh^gNIAE5ue$;ZTDI@u)_yGS(-DU&Q+RDzL_TB{shB8ukBhMLaw=u zhujocxRfGLu%?Rp-^#n<)cDKsb%a?T_Xnnwh_u^-;~96wf^{C47BX%2RR5~$#WKi; zxO9%81h`>VQOCFGo>( zSGJ-+VAGIE`VHpJ$*o0S0{*u?wO<=s^nRBeJk8>JuSBI1NC-=AwQ*&xm#}(b>c&S=OQNw%l%m3c}Z_od?(!ag? zh)ukbfThqeAjEYgpgRk$=iR@n zs%wX$YPrC=k8!wxuS-CGiSQl~>#BK806~jtEen2L%A{_v!9p5{0{U2ll_wZl;MTrO zWgow&LhXq)7D{JRdRktRRsO^ISRWMqTEuoqtPlwVu~>|!8=avhhR^yBfxt#% z@ou=sz2KCO!|k1qV`+RYIRef~4TnW-kz|~p!n#9HIP<4iRweI>9QPNQC(HYjXbn0K z+1D6sE|&3cR14L)KeZ4aV!XKf5HCFj9YT-CzIK`6*+CX5U1p)d0?GD(eRs{L>xe6J zTy(2$9C`}rD)aCDipxp(BMY0V1-ARyVNntvRg`z~ijxFlB+RxdNYaZJ5%Cy8Pl;>j zYWjqw1|~vv0DX{tzhj_S(TX}nrN{>bSyYOPD}Yi$Y0JFdS=}MtL6w4QF7pLN{LuC4 zp%-myCMYcpabCpOUo1!D!K9;5#07}&`EN3Zbz(EMTDY)42)s6=xQskK?Iy4Ia-eaY z4+y9X78_7vZ4px925Y2`ZT7qzZ-9I@>)6Y4hw3zxjXL;ZRJwqY07B5;925w@UVfVn zg{{G2Mm}NzJCwn$R;*M_NiHY5*mO5+f|@ zw(vg6{VvjOoYBS)f8SSvGtGb|Usme%HfFOvb1e$x4o2qco+Q0eWz9=0$a>RGsGSy9 zd{3a^99{A#I$KL+joEZryqCTxyd#?bIcfvwd6D~e^}QQUIf%xU7EU~2QhgsPshMVI zS%9nSk;?Vne#~Eapt5Gtvd-h5n-KjZf3=bifQ3vB}Kgm>$3-A7umm|M1 z`Px&g34|#7S!yLFt=4=+j<8ENVyj$vtmdv|LaP+DaRX8AP%G>2+V3+v=l%77Xu$)b zxHrT^_R_``8l0f5n^9pgcW(6E)k1WHs=(a6PWP;a|7GC#tHMV8Yb8$I)t4>~&sr@m z%X-lyHe+&a#kSynmAmzt`X2b-z5|&NaoUI@_|U(k{#WPZE^(#%yz-rYyA1+8=5CNt zKa9(c>55*y_cGQ*NSrG@Uo`x?!dD;L=M3|2-U147-}CjvL9`~F2Y6^~8x3fk<}I|s ziYT5RI0n55`t?ES(#wx;DZLye$mT58<_xKH#dLE+?-Hkb z^4INbKYq?)+^H0DF&8PKFF<+YNv-xNRff ztt{N|;NF#f0SqN#e=7KbY2nT$#^L~wkS$JPET;v96R+8LjEY}ei3|IO4W%o*P8X4) zX$gAjGf1q!W2j!l?Zl7|34N@4h& zbBC9P>pALW4`=-j1$BCT-PRL(G2zmN3v*e6xsNT4KNa!+JW1;Oom~r!ldg9s^OS>Y zl^91!H@Q3KdHzS3zuiZI_O4yM&?LotX%;kWay@Ouu>*;7;&&U&=Puv{W$@IFIex4~ zcO(58oeke)i14J)bF`%+;TsHBs-WhQpr2ect7hm^Gi3{EfMK}IOP5daJK{emi!6Ah zaWdmR22-1dD#j{SEn0%i1)RT?O{EPv$6^XEfs- zDg#tSomw6@5@Gj-M#8RfMJ6*vvwl##Jd6W!cxOm+GZK+PX#+YChTG@SXy&F2!jaqpH@G@}iUZ z$#W{FnuRebKS8AbJma9q1*-LOf?&NS7F8Ertm$OLAgA8d`gKv|BV2)CtrC=1&FN%I;(y2<6r1o6mRiS z+3R_IJl%qZ4eoljs0Wm>V(El}mzlh^U0aA0ldVpL-MSMRskWtrAj!}p81LAc_iqMc z>L2({RDYTrCD;1$Gu~mXKt(en%koy-JEI!ED0|M7mMvVN zw%ZYDPT}-A*4y?6_VB*&Y&hC~d=s#nLLu}xW*4q2pkO8vM7%fxs4`f&Y1FkQ4mLzs zbIt>bB0OjrpfKwlQFJSE+(4QKyjZ*>kavtW=zrY-85M05)FgH*Z+jlJuzCkoO+(oz zCSod&q{o=QT(2ubcesu1YzUscwM%t6Cwo@_OHeC6H%zQP+GS-vh_V&FRVw#Z42Pf4 zK2#zOMBx!=_Sp>t3!q!Vleg{hX_~g)*xf(ptj4We+~$M7m@j4t16}>$*7M=Wm>7%U z$8?t68mSs%eYUm$xM{Ee1gd@LE)eD`y(2f&i?mP$fS_&b(B5^+0Sc{EBvch>^1Lk0 z)nc+rWnlfUO}1Jkv}t4RYkzt={kPT{_K&p$lpF*G$9;pBT6hLzB^@Kg?`(%Z)7fw=D4Lqk14G4 zE6XtRlHSY@)LKTYgAX=|=n!&;?MLI8=aLAXmEMK*g1NHLN1t>4GMnTP~CJnuB$wXJ~?dF@SfCfqLtqK73wB(+fBcH=p)VTa6C{y%@&_+VkZ+QQoB zxyAlu6``RP&b_}07av}=y+c)X?3LQ+Xs4WBBHjMW4=l-|nrU+Q+Y2y1!u_ieIFbFBf_q;LA~kKS~)TMNbCivPFa=r zpX-Vu6oD5_P2#sF7slkVXfKKi=|@kI_{JivnC6H7xBrmW00-6Ee&BPPWM}N1)nu-M zOnl?T$lQfn!^p*$>dQ{nBS&!19%Vu~3{Ejy#}mPGb6v@f!PWuke=?!Qlk7mbRQ)>H zRE8cIG!KW#hw*EdeV|TAci&%~|8=MO@uI zDkoO5%dU{&Y}G|MKa?*7g)EiOM7QzM5E$Rszqu7692<>PA3p6a)2M zt&tpxOUqN+n~RMdy+9ov;!V!aQClOGQovOG!vnW$SGR~JM zAFPTumF2JE{L?lUizfVo!PcV1)A-rHClkLPXKz$**Rw~|>}mHZzK!Ej=*MDt)Lv2n z=k&%d*&o?%42i=M#H!nX1o=Jy;NfyZ?>C&SYXZ8`Oy0iGqAw z-6Ee=F}o7ocd;8EyqG%Ndw=K1ho?(2t8I{=4$x9e!lv)s7o}$fWS?6%tcz0228VtP z)-g?(oR{J7zglB=mJY&m1I>Xw+v- zkfsSO4KKtL0bsE9>a7Pz8`^w_!TeJJ&Dz~`z)E^Y%COSL`tyfJPqzp3vptN6&s2JFY9#&qy{?~C z|BKjo&_EGX6IZqv!8j6z!t`NhI9L+iir^9EH0QS~rA=Um)I96YOqLOhVVKb`lS5%b zH7?zcb46#%jCSWp`}(qfHKys!Ju!KBULfnPE=C7{>#NRjbpJn{wkj9s=o| z>a0R8m3PdaOBz?S#tQ#5mAm*)_seyLTM7b9?<{{d<5S65N8G40@ZVr9|K1QE8quPT zK2lhkrqq7$nMrfBFz19Qtdn|f-(P#kv15Afvv$cJ+K%|EEmxP%0wT+!=2R`Xa!srR zNq*TO*Ma$vE?o%c4bGg`LYyJBOIs=^eXlYOTkOC z)dK<79EqqL52i<9-Fo<~hdmiAi##4K9k$*s?^5=In#GSb3hIm2X6Ra=zcU1zglE?G zp8#JD=enxqFHSF`83{POsYQy*;LDu<@5A8HJ@E8-~g-gblg7QXQvsSf$ z5BAwWu>=d9O|)SSc)!xadBruF-Fb=lH5+|;ZeLL9UGk3pQ9`afAXWH^4+(s3M)*w; z_YL*;6*bCp0Ks`j!p&^3iL->7sanD~dA>i{`vFThcQ>mz+0ZU^3e)qN!~jN5J!Eyl zV%i+pk$xW_v9j+& zR|}@T#V+391c^hGNxZNJr~_5^&x?q35bH;$jQqemTD(hAww+=Qh?(!$gf`oAB0(1|GNjztaInW{S*An>a&nY6>Uj^A{7E?i`XMA)S$q!S%SSYpdusi&gTY6 zc|SM<6IeZ%pBuSGl~}WN^k4b9>M_cHRe-SZ%r@S+=@Gp!EHOii4l-m0PlbPimM#@`L1h5Z$KtCk*eyb z%3&xYWXQ!8U@Y0H#oB3hK4MmzBUDI7+mUagX##|}h9L#c2c3lCPScR|e!<(udTDiM z=ejKrQ}EpkpkiNe5KiNT`6I6+yrs@S!daWd7v`92hF=ZvmO#wQ zU{&YnJNJdRUO@vMynudg@TQ;oho6vH*8~@=gBDQN;1dile0h}+5SK2&pT)89Ko62lU6=jDH@t1>(3krF^b04$B!R?K0SN3n zt)dt{!#{*NC9TD~qBCefsH5>-3Fr?Ob0_v`>-=Y5U}xS!b()Pg@I(hB9D&0KAetBJ zURW$_syc3!YL%Z8*dw>2zpt)Jdr0-FJS5n6(_d#k+3#8x0-+)|k!J zuq!{99KOwKvfCVKjoBX033b}aisgv@aI<>rH42?A-6^;FB{pk>MC=ZN^pOD^;Y-|4 zM*t<^ZuiCJEYzs3GDmEVwu8(D`gifbZ-B*)-yW@Gw>$IGZf9!rHdN)sK0wc^Sib$p zxCY{ZAUlLf$#Nni2WuE&8IF@ah#V5;dhWGh_Yg3EM*$#&W>cKQN%KQBOh8T!e1 zw-kk&!R)frt=X=T%KmlgmKBNbyLI9VfbNBeckDTny}7>J5KaVn#EJc^%>o>V2B{l& zU2xuTw#Uu&I&e(O^!w`3?Vi4i9~MFm1W^btEPO2`5_GOO2Q-Yhc`42bP?4)oGxr-j znioODZVFjHNP?Mmc|goT`&(PZ&TK4GW<5fVrF89kJMy&Oe7cN|>Iy1=Z1KFa%lY=k zm(&7%YZJt-4T95RO#n>CKTFXC7Xkr3<00jX^v+g4RaB>iLP>dsZZmtQ@s>cq!$64O zT2cKTA1CmRrO6k;QQF|_#0obv;9_qQ1DPZioZoV?4KmR%P9R|m#X7>X1p8mh_K+^% z1ydMK5i}P*(3+ya^6-)v^ttO1h=ekOB-$d`c zD>IN8&ypk5s5TmGm)aD4lJz7rT_%#=fgfTJZIhGikU$p=0%~+J=Rm&shiwoVKLyx| zA-oqC1Dr{2i0ODBJ7itw=A?WoYDB2Zy?UlvWVQ{0z66yl&i?$$2GXSi>7Cs$921{Q zZE!XPqLzyP*uQC%{*(aE0mQ{jIc)KJqu5AXfNUncPXM8q^$r{T3NV=X<<3Bj^p()) zKtKz;N-0;)RdQfQ5yOc8p!rdw@Ae?YY`_C#1IPrSeY|oqslx-v$t*XWiaVtlHx0%` zT3%2}r5`k@HsF-^^0iw_;t0@u(;Q*>&s6fJkRsoSP61V!i23-L0ku*C>okFwMwn$+ z0T@x?l9*mxZ$lA8!Y$mx_rjyAK0oLRI)0tZrzYnDW~g1H&1ui8am6mwEAN+e!@ut+ z^_Qmr9;AvTkg`E%j50v!fsI=m2E&xgAJ#zD&6uFbS^E9JW7{EK297;&0BoH?e*j8` zV-Wt@h;a|g7A!P(_@x!=i~u-)+l+Ui8TU^TuI>W2;bumI2E}a(y2+34;mqAc>67WU zOff)>9SbF3R-ZDp3)`Qvd`?00H*6B2jLY`%2lTcF1C#@;?lRQ#7hAb#p8n|H#8+X$ z#ozt|V+-6)(*G-untj+S`+39oo@w_~gkk&hqMvL8T@I9Jo4g|!qnh8^M?#D*u0oE4 zwhG*WbpVnDXELjmbzBFx;%!$m!#CfeJBHN|GFX93Hy@)tm9cTMeN1C&)R#x^LHl?F8So3<5tj9rdw|$s#3HcZr|n{y z?l5I!iYL)BCxDGoD%WImw6*UKv89?&jRhZEU4jRQooRfT9Oj-(QY$P}iRoKMJR}F# z7M)WclQ*gim#*jKmKfLcHinb;Tz!mu!Ox2RI9u#^eR<&UP(1x|avJsSb*WpJW3T0L zC!H!R%_NY0?IK3Qg7@-fT*FebPxqmbH44`EOwmKxSe9gy`{*ybs4=1POh3Yubc8#j z&j4~4l6ekVP*~BMO?SIcho^Wf7X%`@;>O7(H0=T;@zj{U-DDnw)EKpjcfk+Cq{qss zTPPE-D#BhjJf16q70Prk57|3FiR1*%dFJijZ8iy|*NXI?c2h%!S+;`Mw~o6l8UFKR zZIp3=o{s;RU^_1LL3(nl1`we#@RrPrJxFBxiIwdCNTIO3UUE{t4oqxnT)PYP_(Aht6 zH9q|1vz}9wX%9~3xV?-K>XX5%pLcifX>ov5-3-BW$uaA!$9Rwf_^PhV;r9N5+gXxj z{7664waptNtt^bPhp4%hkR`tfi@PNYACC!85k8w39amGk)tT?e+n$;L(+no6Ooe%U zwMGmR`EvvngM;h?+`e`at!(*tbcm;w*b}Y8K1-&`Fz03=tb0Hja@1T&>2JI&_4>H% z)z9BD^IN!F7d-nH`#yx)C6i3wOKLokwNW2L+kQr~>vv7@F{RXW9JS*J2ZeQkW1VI= z!h~;9un3q+oB*v5)Yzq-;OD+P5r}*lh~iFeUiO9td`GwH4+PTEgp-F&ZpfK~llh8j zK$!K@iNS9<>~heE@J4N};3*Ptjy`(a&do4m)G@d;tOQ!l zXlb2wq~`k>Skf#KUd~}$1wmnX)r;=@O6#{Nmgle&N<)^ZP%2sYg0%iL91fgphFe)ujfIo&dg)#?Te@5+vhKa|qPm z$XAGJzn73ex8fT65}hbe3J0Bm?sbN=Ud6Bux21J=5OFxO7)Eljr>^Mc_med6`;9=2 zYUI7A(PcrU4et;UhYNFp=`eSvdr_?F&^KwK`4N8e~s4y*Y z@($%~7ZUWzAwNGDAu!PH^K(CExzW3N)YeCoMsqDlxmsfg00zkZy$Cmui9YSNTcb+> zc(y90?#FNG2_Qz+aJz-T<`H}>V9q&ron07u!ZNgmgIq&`#GXBKVoH;FD+-r`QzZyU zf!v2emHTZNqpR|-=On38B*e3Jx{@tt1b72~RH7)Rlut#>Y3;k47yD<+)ekov7B$`i z;hLa7-1Jwc67T{GlnyDol5T3Rg2fRe9PSgm*t=IxCwDKJVsyp(G;|z%wm$!~PcuGD zgTCAXeKxmKJKVA5Uo8)qlGM5fY|M?&q7jpY>huU&|F0E<$?;=BfgnQ8LjtbJ?KaINjeOcjV)p|+=b1w)p6w+`;-HcS`w1M5G)mGJ5pK5~&qC=xiq7gpu-j z+rhIlNN+k7@V@11s&xoPgw`_D#*d!<>y6HW-h^M)Q|{3Oy@G31uO6{}G<>Cy^ua^5 z&^>}KS?;~?V;fNi47Q?iJX}*`VrqP6{tKAge!?K@EEoEpGW$eodrq_vHbC^3G*i`9 zFV-?fNNM~_pZ28ru zLAs@-yW^Yfd+t5we3!ow*UXwV^USZFYOcY?x3WCRKrE-)Akl5Dr-{jdB9#kjz?EGv3Mc`QMh4N1N2UU*Jbzelw760sJK6aj3)Q zS|{q5mdq#3pp@mMlOEeHguz@ej+{s=C#45xoENj{bhT~u7^_UN?W8F-4A5d|0Zv`@ zavqdd$b+|^p+&0}YYlACR2tsoiPmWkc&v(mvzJ<1mBN2{yi+ov{egWH{Ta!&Bqm|| zjgfAQJ$kN?>vLB{l$cm{v)j^iY+`r_1tvj*_=$9H6O8$X_xTp(MYp3-#>pXinKap~ z(R^`ga5g94DLD_e&x%@Vh7TKQfpjJMi$W7wwVuC|iaH?$@NE+Eow2a~+QL5F-K2Sp zvO4{n?A#Q^ua9w8d;gH{pVt!)6!jF*LO!qK=W!z-#x@C80DR@5VUVwGrhprzI}5Oa zjFLn*{mI7M*(f<6=O772aw{wyS%;*kSL-=R*1~AS)J&)A0#4zz4TqyAJkmomq^8f= zvr%(jYRHuuXj(+MQdpBWuof78Q zsOna-!=(2cbaz0A0;kaBLk!^KxR>VneZ=Y~V?3+jcT5By!cfp$Tf5E@;NfPQH&NoI zaS?!$NZIEk3>^OJeSbGr7IEFU=htcN%jtc1YJD(6mr>V!cQ^BG_A@39pJ&gyV}TVz zge?ZLi32}R=5>5v83e@{>9oCrz(MO%A~IZQYbW3_=h1^E)SQWNmo%NzVriJ4Y=#v8 zJeCLg$QNtaoJv#TSN6xPh(~OE!7|F~!(g)0CTE$LqlMBn8)zSB*qli9a1~Vx@)$4O z1yz=82gk$ z*3p1kt#d1^Ia*p#w(ct+w2P&KuY2C#+*x=F+}&H6JTF zuWKT?9}051m$Bg@AoVJrF%~6LIw^bvN5I*S%P2i!A&bvce5By3!wVbR@fSsTiBz*T z#J^+sbhQbLFoE=v=VW|zEyZLPbYj}}BKlP)TJ_DYean;F{a{aXOnuSZh4e4L74&Y_ zR|6qPBMztOoL7us;gGm(inY2><1Z=44pZ%ev+L!^J29J@j9qBNpT2qzKW+Z^iV=p7 z#fgU4{qBtQT#6n_gf1Rn*Ge@bX-bwKiGKff{)D+HE)&X)3mOxpUpY|@m7Q}VBRhy1 z&vZl|uQBvePsFrJCh3wN=5e1mAcA{7$&qvCrmJ+`bXZBqaL(iS2wZ`6qR;Yu{=4{1 z=a<+g-A_?gnFl}DJh)G19?IcohE4P5<%vz1D-n+hv!Z;Ly%kVz+^VU=wd{jThY%1A zv?%HbA1b>VeZ;5&vzGipiko;i)DCU(hmghz7ACNW;{~NOy;Ltb8YY6`uC$fiqat)w zVxH41kqOq6Ey>nI)BHk*S?fFUHloermAh_HHnU%pOo05NxBQ1EJU>*pabz~c!zeqV zuL}qA2vD(jU5PfSjNA8xvr5f%dO$b~j!h5V&v5oujwaA~R&IkT^Pqv*ZlO#ro%iPb z3xC;CgU3mFp|J4L=o3miW?JQ_{g!WJJf>9T5|Z=}{0A>Hb{EAS{LTv36_3xR*s{&W z7L3}GPPAV!Kz%+$ScjS)U>)lH<;T!b+-XvR_x;H>|L5NaeriqL+1gp@e~R)xT6}=S z7-P7-nqJz}RNA-wRqupyR7IR3e|Hlm#*6ns9~Vr^J~LkyJA$1`b0Il*OE&|oHXYA; zW(iS;{jtxigAA8@d|$(M6U%l;CeR@yL2uq1ydHo}oXwiZ17sL1Gx;41Gdfz=-A*6w z+|jQ#^aD+u`sp4XES#1njbn?>qMI&b?`Uic`M%8F4Vi$FHjq8C>T$I1O?@+!Y>g>TW(r#;xECWyr=!{Fl8n@*YhunF{ z$jE@ZO7DzBU`0`N<7_w)D#ylmGB#KP530lxX|R{hngfYI)%t{2m@#RN^Iw%|Pe2@7 zTHzi_+X3w14vuh7n0nE%={l zj8RT$pEX`3tz4;?_>$sxPGi9YvHeZV}--WsKvKQbhN=#{MBFeXXfpNB(zedMXnd*)!rqS+3rCIdin|_icCyYa8 zO|i0N+=_j)B^R095XKaVKHFgU1Zp@OIp+QvI@jim^lPbhGU5YSkOs{S;cL4P6UHK^QtE+`PM z9B9c=u}ZoYZ^B03MDpPFe)UmjQGe6(w%bWo$)&}k&E%6T2XG7wxuOcQXfzQhjym^+3~6+*#pym3n%in$ii>>7%)!>pB}8-O>biinM5ZjnSAchSaL^Tn z-MqogEPWlLgpwmI-Z6^*;JdzM&retA*L3U>jxTa(_6Jc$4&U7luPTz%lnW$|@m+0a z_Dg*cYVr0_2crc#{&iswBUo8k4*&L^2ZNdN5RjcdLwqX{-rqYu67gszsWV`P~F1^C7Nyic%myaK{PV^ zB<7#U0PD8o{i8!_O0Rxpk1w-^LEQIT;WE~s+MA}{T&)OxM2-^&;Q`rNy7RUcjI-zx z<=&ZxG}4JEUC$)a0N-CF-!(bsIi0xNR5B=~ES#$nC%@+H*w497iaN7*MHtikJp4JP ziRR~WnwF~*z0Xwj(RQ^+)eJIFEoM`~PZ3>0pc%bT;2mHIbfXtQF}G{sFXwwL2>j=d zklYG9e|(`q%7}z5;W9wDBT%I1{B{yAQ6eeQM1-$qbEth_d6Mw<~W-%54ej zP)N7+5&!GAnU(VElsUhjP-vPc2xTi;evOS__dByg8f}&yv}*PU?bGA_&B1VKCP-Kg z1ukN2;IePW4F)>shNLipf^-!SoaxhOw-EQUO(rAc-a1ZQpyIhl;yVxlb|td>aaBT@ zF$wL(=rQ_}U4niG-is5hoOhM@+qUTtW6PDRt^c-)yd{NzEwZuZpx)hD0S7hQifdsZTZO9%e>C2ay`hP7VEf<@3hVx;4xK_-M7Wz@_+h;F7 zgr{2TqU@~U{cj!y(1!|56FgI|5-qT+RaB?7X{q5)4||2TVnN?hvs(6i`~j--i?@IR zIN`(RLzT%;UWNjZ%4?d+cjNWBz_N6kM2eZRIB~Zw;9-VbllRI!zCZDgoAJZDcU=`# z{xx0@`yn9rl9%UGi>ZY4>S~IJYFwo9G|^(+cR_J0V#QS*$R_q`q~%PUAw!Q) zvG@oJI9vF88X0%-4J|cJ)=>Rn?ZCXChhNc#O)iOMHj|7oCP`sG`*ovGx&t;-N)4QGjPji-)~@B>b>YVe z2RLj4W7*bVr1P4tlTn!YX1i>chCz_HIiSny19*z|>#nA^GasoC;5uTG;;W`vBC0N0 z@)DpgHhWLMl!JeO$m1+1q=Nj2R*LnK=JM8Oz^VM+iY zR1<)&i;ZBGpkU%_d)&+EOw|%js&2!)f%b!%jmRCGui;#SgUQ{fsPF^~#SYG zI%k;SwggMg>8X35O302IkmY>K#vfoPxH#JATzn87UjGPYb$rx z)mN41sA>y;`gG0TUhUhyP`>+x7!#-OlNQAP!jKSrQ3I$r%i+wB?@hdzFMlfaqvBkJ zx0X^O=f<_^PcvI=)qfWw~C{8G!Uh)jzArsZ` zTny)bmy@0`WLKSJ|}8Z&7ZjTWnEo z)EV7vh-CglbJ2v1eA7EWh_9&SpB#=QnB>BcrPeqZ*b z3v}cC@S^C~O{T?rtW!0nmw)mh(y#jUuat`-55mx$m=4Wj9~oiqZHNVb``%gDCg*G5 z@rUkkP2`r(0Wj~js`W10%C$3}VY79sfMvzbW_q{;?$9qlwur;>hj|GCs`TQfUF)vxfrwQ~}2ssB7CAB3PzY|+0 znX7J|HB322o&=EP^~!aNu7`l^O9jrgWR*-Q$zh};yg3H&)PX$|58Qy^cl(eYXWT!l}Q%>-p(oDx>I2SM1X1RB3FCjd40&NhwVEu z^MFu%r{`lI;LLC(Ou1GQbOYYri7@C)(=9Q9a&1uSkiE@7sMh>o4-7b!Ab)v;MZ$moVNenu$JdYjF zv;iHzngWo%?MtL7=OpcFm5;>0yMAfS-*vgZ(?O)epWS{piNG#kP59^!GRp?p1xu^R zv(_Dm0mMzwXHJKtDJqRyG|$eFZH^$nq~w}Elqz8*QMZh>e?tAku-N-6GRvg?cJn-XBD^s?Mf3B z#B2#^Fbm~1>3*cdTUiv*w3&0xdHakit}t zgKUQ~lTI6KYUF~K-_Fj>P3?|jFn@N>z43TV=bKJ}P8Cp@B+iH(%s7>RF#c%FBQ5h! zre8IRVbhM&K7heThOP8}77d`bRLxb4IMVxB=WHccGE*n4@4iBy;{u*!wc?jz@0(j7 zq3Eu_fr!2@;Z*eIyA{SHVtoNB^{{x+sEgBGTOSYz`=tZ!JS`_D#|awR$gS6UVNnRr zBnH>i{Q;o8uY&9Ryf4a~Ev?NRFYuYh=NIjw&VJM3sgLpkRAEXJhSP(xojLqPomz(# z8Im0?>j^eh@b{Tdzn^YRa;m1=AsF#g$&&LO zBHcK|s<=l*&i*!#g$JlxlzsF7onXwj;xPjnxRN)(=culK>qL8ilFCZ}vPrAN{U%EWRZK1*caITXo*coP4+37}M4%q=sR2*G)p3;T`y+^Jpp!dvE7p9^Lv zHlKTa*#ezp3^(U}Zm%=oI-uR5^q|7R^9~$Gk|9PeT0#$ytaK;Q>Y@_5$?H~Dd+2EJ;f1;m5q07lu zGonv^Ee;-!Nf!>BWv9NWlE_f4SiACFpoQ4$b;Rxm zIFSBmi7D1vzA$Y8w!Q)pP&%)^IjLk8y9-nd&kgAGN`GQyng3)|afD`c1pC z3@tVYMMMceI?TJtU28DD4ibl_<6w@D?Lu8QACL=9iy-MKr71u zWrI};TLv({RxgZrf`141?fmmZS)#Qxcv0oVE2I;*Z1t4kvB{U+dMbn|=4P?aZ7*wm zA0BSuh-Pca>tExbXW+C@OIiA_py*5_>l+^|X9prywrr_racpm!G(EZlUKl@EuEtr@ z?7{%|&wHGai(%nGF&v9?_c500KqN|rH`vC#xCaf;?5NOqwMh!oYYGoZF&S4tCdQmH zUs`Gd=teeWC3v?a@p47;MFt=lbrCD>*G#Sah*LQ z?M)uNM)q9kPQs&pxKBBH{P#E()YFiSr44{cBTyqqpP8;SOo99m)j4B%s1`!Xw_Pli z3?yXUpLIH6zC1mo%JO@ucrzy>6It)03W#crEs*6fAp{&`)%%5zq1OHn^G%YI(!d3Z zL;i=8(7mt#PZI-CHIGeEqjz~q1VxD)Gng5*4_f7cdpsqw8RQ;wIv}Pg{K=dpBSa(? z9|VTU%Op{sP6^~Uc1knz*?Jw(?dTV@ra&8>*53Rafn7nha|6^}<(Hw?4xc^G4{E7f zydSL}Z;nqpQMHIUl>5WSDu8AcbY^+g6b}-)r`Nkn6Gvmg0<8uZnKR%L;=nT>Nb&jrBnSoWFzwBnQKfF3Z_PE?_UdiYZ1UPgX*pC(;h-yHYn=$=;#ENnm-DDN4A{@{wV;qi4c8GGXTCTyW(cXO zal}FjqL9PCi9?o~#+RhQV#`#y&=1h;b`V(d_c%Wo(W8@%)j&&rDTgCNjeBWo|A3A$ zR+j<;Ro=;P*na+{p4$x!N#38eO5X~g66 zm=lF#xGyFuEUIqTU0m+-xWKD75Ae?Xp5 zrx@LR@-kW!{f<9gATAogBig5wGO-`g2v9IkpFxWxWW(?X^kSNaWB#tcRc2COKmG74M!#9ytQ`Xl)sON-x!h$o zosYVk0Q)xw9IB)ROP;?GGh!>N{o%EuDtx%$Vw-XmnOl1 z`E^bqB^sMnO6Vrt&am+2BlfptxQ;e$S)W#jVvj-`;&i*9P>EFB`#443%B3s}Znc@(GH zY~v&+;*HQ5Vjf+m`P{fSpK$*mXo+^SD6FR^e?q-l>U)3{&Qw;~Lfxbwz+v_)5OE+G_&`NOQ=zFWF5}oGav|RPk*}5xn zS~MH`NxnlhPWZRQFcz}qk~UmUf+OtE*$DLu`#`$R(BMSHQs%wgC=tgU&t}K}nZBPD zY8&~oU&1ljq5*B!P%YPl{^EasIw3E!+)|DRZ2mOQ@-id zSHYy=Ju?#OnuaOCTWz$T#9mSf;{=`X<93AztuEFMk3IQh%z;i*7NNYv7mLf640*qL zWmfndMmAtlS6iDh9?t) zg;|VpK{d=+9wjQ4#eofvS(CVHDg2`4rMh>jCq$H%lYTJxFhncW9+MlDI3}`d)eA>_ z;E>8JiQDC%xZ%EGm%YmB6H88_&5Tc}?bCD=j24}fjr3B&x+qxZhkY|!K4anaf`fih z(38&l8D{DqUsB>g-(u&JeCpJ9anF$!4D8*a5;Uzf^1j3j`rb9?P*qPU))fKicpW-T zC)QGfdWgLNdc3+#QTN$BtqfwBX@pk~yqs?Gg0nc-qg3gArD82K$>kb{YFswVe3W^w zx9U9m>cM%i(AtoLCpPL6t4#RT!_)3kSt!$(EVspKHOsgZgvP9d7L*(+B1EU_q~e98 zZE4gms3`6L1+|`%0LMMYljogcF?^|OTVW)NLGJJSqz{;P65v%q2~>lr{LJ34Pbt_& z@6Ueg+xOCmCQc8~?Izf}55mZ#^?%RVBpCq>nd?KKk|zC0MvmK;CiasW?L69F*_`#X zhB9(u@qCZm{pO0h6Bb0hxkmOg>NI>^a*rd*Yld)4WlSN*E)9FXXGeg3DCv6N2cDe^cUPf{nFr)@pG45ufvb4lR?a=rrU_G>Y0hb3LmOp zV++;{{}RUgc)IQ}`n0@0cP5%^R&beBO}O@pH+}Z2B=zy5o#M!b)5=_%tZo7QhIetf zPo_501W&0N>AlMtiW>LLt}l-Vy}raT`9M34!bW>*Gj|FXM5YQ_fx=N!<|C=^q$Si`{{>G`BI7>GvdMu-ObW- zmAv_!zh`P20tTk7bG`tRlt-;!CpZ6rz{8Er+%$p0$2>OqA1W-q&0SqJ3wlv^OGP|a zD^DysiT|MhkIH{~NIujot@I&(%6a3fk4V!oI@e_e*9FgD3^o)t-@0mhsj3Y5uLlle z6#Umy{e&(=z#~02Sl=$a@9rmI13HboEPdf?hUSCDPLZE0A z%HQTsz7$now(#7ZrN3+M_|#nFJjs7NoG)^*fz!g7RQS4=+j{gE9(fC&xnt|S2v@9v z%)u8crVg$!oUbx>N4hY6sX4Uwyc=B=s{6<_spvZ693#uOn6_&r8MBD(l^c8qEJf^;b zo91REI`v^QND@sGRuVdn&;9lrNMJ_*w6*XDzgN)XC{OdwJNn%A387Y~j+Nj}x*FSg5Be805PGZdt{2Ib(xmwTKenfUXpT2?6St+XSfM_0qb~JsUTpTOf_oYw z-!`p(!!Q@>8H7Kx)(fgei8cce+2VAa!IkXw+9#i;`A%Q`>w5)F0q@;+azA(f@2od% zmGvIgBi%Ye&VDr@gjp?9>cMQT+y3HL;2+ok{*hnf-QC^qwx=r7gmH!h?G|3Df$+=O zDxfE>6KejgrlFTDe7=m|EDVe!hokqXjUSM3v?(oto z_%ecLZf}I(1+HUXBe+c}=^5b+A#*srbQ5%ln3jbS25#zCR+0=(Mlg&cwd_&-UQ#l~ z?m?qw*qW~o#b|t=H&q0^OK?ev0_M|S`z0YdQ@EF5lrOGJ-1O~4?OEdO)uhf+su-Hj z5MNaaA|t6fICKGVZ$rTCOjfT?_69OusHzn4iK9~$c6dH6GDbaCHA5{G99|=R3ywaM zevgnzDav2o+vS4=72yLL5rf`i&V~1kY{#UV`>Z_9JK9%jUsXP?(_=*GvmHl&%ye<~ z2lHrGWAN&;2v!XR=@-$t(sB)STrp9M1>p2ByCtcAi5O2{(zv*wdI$USny-a#gtX?`3A3t1#qo3-=qu@78`gSCln7r7k>W;E&vzRX<*}ly+M{; z#{d&KJ~j$3Gwt=50>Gh6#AB{k)x{dcb9}}atnw(~$L;`>n!?)}Be=UZm|hIbA&(9_ z-+-&QW~KGyYtY45DUIJqUghuE_ek=Qz^>r7{$^N|9f?K=>RIH_sb$i<=#Ned%$(BX z$B8UN#YHt29$a|aA^swnugJ3GCm!X?9P*ib$WufN@v z+Dg1fz0>}SkX7T3ZL^MAk+z-={HZhqn?hi+*k*L2GM;aEqf*J|O+oe6sMR*-dgNAR z;wWrngvytw$g^jBP>@15++Y7Qb`|XPnOgvwjT^b)5bXcLW?KkI8*f$EMf0CXXh=Z)26FygYz0G@- z=rT&~cxyfAB^fXia0?@lxDRUS(zD?m;0rq(nQVI{EikRXMMozICX2O`cMSO2^f5nj znD(48duE`qwM9HG_+0yt&R2`bxJbLQN7dX7pp##5X{7Q1S}7_*v1&0BltLqJ z3uvgUf>bAeeVrZFG!OnQTv%f7A;=p43gUK)p1sNYJY6bW4ijhIn3)I3DtY`aTX}21 z?pO4f-zhI0{RVhj)xgbE1LVTR7Gn{)UF^x9O^9BD?D^}CHJUr>?u(_Rfx}fGWbPeM zaZiyNf)>DEMFZ|$Oge3hbPv){61%4f-aAeE4cgo1XjfQdto?4ZYj#}iQvr67!^#v8 zHCp%kJ?RLbWh(ALc1^(JH^JLXYh8EeE>eCkMrnwBK9%efoWrW%+@*?^6WSF9hDKG^ z@TXxALMWR5myi#Yn>XS0-(n;KMjb1xajCB{{_?kFyAJcRwVLtQ4?X2i@uuig_xQQhkz9OOu)2XyKe&0rj zU1O7V69K83t;BA=OmG>Ox;kk-RwOgG-XIPjHga^rMRl7QscrJm%_$8r{yl(zyw|Hg zeN#QhrKr`269nSty{hyrF3e2;v z7@E-%qaRKU42Q@h`lcJrQcHxgc7t2#jfF4eH}!8H^vf-SlW8L#e-E-lrXi=TT^$ad z3f%!0>im#ry0NykD}=M}y-(oA!fE#g_cMaYUxS{n``=QriF3$Wu~53E;798joi8pI zK%(G&rK7Pg_7mREol0_Ys=yKRlN#ShF4cK+?EGS%>W*KpG`7U?`cP)2=CVHSWt&kH z38z$NASbzvcrB)*?U7@zY+lEenF7F5gP#Eu$Xgm}{VUSERp9fJarf1>h`AXW3QFRD zwGL^#u>tb4t@1%n<2_bOMAxeLAmA~M+!}nw6+WJJ036Kcs?@x{HQDH&i(44^hpJaX zK{|hzzzI%TnZFquO8B0niT*r~oWT;c{MECuS?B48c}&IiDx(UPSwX)+e=xP|XQLI) zgox)DUqL?3N_ne8&T~|cb5#MS_of4<59ocVjDOwD2PF-jMg?u5+>Hf zSKdqSy zIZUBGJvbUj4$Hh>N#wessYAPmt96nbzn9Lx9C)?8tt5%3b`}A9G}QXdX1eNP3Thab z$%5AzL7Lke!3#*-;wCB0sY4EK*y0h7Db#QZID-S4I66AC5hdL4?*uI&az&uq1g3!q za|eKq-+*JX9_;RYj%Eru;f1qDk`>cwkP!EtJ6bLe?0r@zCr=?rs!F58+~(}gNMLOI&>K(B+ct<+1a$9PcpARz1pAZd}}ECJCOZ* zAulLLa2^R|nK_YL1uE+&3kBvDewMXnB|&U2d1Kl8b!<=4rfP!=h|3b4EFnp}!m3GO zUcl~?g5G>-LA*5q%YoN=O4Q7{KKX-N_5s>Q6H-dyMGAO|zhlEKvXz3FiVi-NTZM4d zIeWZ!@#;W-tP(EA?F^;{KImP&egoB{kqW&fdtqH+`>imj)^0rKrb-3hN!Kx{py*fP z+f^f>5h_@J9fj6y;ov6{Dp+BMCr(RGI4`{xk*Q`I?w*UaeMR@2!)XB}2O|_EJR!kn zJ=pOI>&rs~U2|xFiDz3bxUYA1{&WGhvgcf7sx}_{w;--Eb2cg6+YgM6;svt^Q zOTxq7WmeT(r{;J*zqR|EDXaB$1LP8(We1Jrt2VDve{KX)%6@y5D{j;Y7sPw1) z_;x=y6!z}$zHb{DzAM+D7wKC)ZXS32SOyX|(F-%*VUJd}0e;fDy;jWQT|gNAad~pO zQnf^b-959#fhM#)7?iv+&tAR=u)UYcw73-M(QaeHaojw8JG)QuSJR+|5=A=tnr$rP z2=2w{ZwSIkogFg*iM!zNv^UE61b-7F7f7wnS6HY^+G`20PAmmaR`yT2q$u*?^sqW^ z3ist0Uuv-Cu3(oWoMw68bP7(mCP9%G%-4ymFR}`HVf8{RzDBjEG;C4K3cp%=LuStO zqISQQH3H&-&b9L^e%e1AK3!rIKv<@s@19L)SK+6jYadihhB^_M%H1|4t3$J@i*ofR zH~lLJr@!o=g(Y)-wvl@-0m;qDxkwYKsP8DRDI`o|3H|k?!QUve?nk4@J;ujE%;K^Ab z)7BZzL^L*av$o>Yc%~^6+gi994#}fHNJp%s0J9P7lR_ZYwhUt%*U}>YtC_6nF*@~E z7mwNTp55ie5pRbCi=(k&q|G>>v9Y(gq%ir~ceZ;xk}4vm#JZi9v1aAG`^D>ClgYT`dyAEDAqfp zZg+_v1BVM^jTZn$$2V+t*nf6DTFk(0aU;gbRH*-Z9Ym)t{ZT=|X6T!%NX*$6h7Sc- zxfsdG<@*UYiX03Yfq`$I+_FKHS^LOBG3T7O^pxC<>;`^VIlpDD7DSGg^q-C_#7mv zG2_)z-L&vDjfNg*KxkZQx%Yp)ZyP+At8@CZ$kbZ^F=HMdB}#gWXTu&WOH5#iVx5+- zDb);85A-4hYNmtTRsm3&mMd_V!X}&{pxZw(Xx0X4$sKfD8^qj}OcINfqIUXU z*eBMcn}C{+y}lqV?VkrW6=e^HNmbVqN|Df zID}D$HXVVQOygHW4%lr2fk+o>lt(EcrC$!Na5CDGr(l!uj?1y#ZcmCJ+>_t*tQb3m zRA8N~Yif`cD(S(SwT}VBU*rXp5{?< zbRi(CZWNLH4&CPkIV{v9rK0daQuS9Ge8vO_(v`N5yZjeHoQC%8k`k0AICqcexQXq< zTfWDdo$`T~BUT7#H*LWfd*Y0q#yAj$SCt(t9KSDL`c@3zDuN)H`}ciA8rsln$p)ho zx||Q@54SVF96a+?pf|sWyFzd}^X(GhzGIjStAM;OOh1IrIt)C@5z+csYY?fo=p9mUbk)lYXyh@HXaCpNMv?!AM33oB z;T85<{~xm93A630^x?wY9tzy%)q=%>d#eom_*FXO3T4$Z*H1&Rkeq`Ptc*T&rD31g=0sW%v5C}6iASu!_RdL<(OiO+>H<|2U`>Xbdqz5xU2e}e z8ziM3y5i1-h@|C`ARGfg3H)t5-0ejt(f&i6@EvWOxbV=*II9`2+NweM)k3|%jFf=F zF-@iI%oyV7Yvq=UJB@O}{>qW5<@MyLs}1unF^b*v`?`4>c;?ViXB3axg>%SxVD+F> zFsb1-rx!noNhQWCzI(z;GN2$(c`{(QZzI$iVr@Qk%QN!b*mnP_Q zw^Pz6l3_Z8EDq#5LcdnsdmQBk&b^M~MBqJ`h_*Y9FVw)D^C$&$7L)H$33qT(IUKXR zSf{QYSWz7$8#BkKUt#5AwY)k)Pdl)PZCu$=5H*P=Mfpe(`-jj7ziTlSA9rZgQ(q(c z5#8cOpU~Z~doJf7RtLUlbtqPN)Yn~azez2-6YB18v4AUE)>%@am?k)>(GjE67CF6k z`j}dH+wH*6>Dx?Av}0B2^gzyJbB$rWbF||Z`!&}k{~&g0+!k;!?ZL&hwaw1^c7)6; zUJdf-EEgr6*WiyYKncJ&hP?(hxZskwi3aKNm%z)JD~0 z45tqjV)#)RdPqj-wLLrnndAo&z;RmON;I(lru@ zDo6)^<8e06kq?ENUAA`3qU`ZT3WcZ5`Srp^?r3;B)5wyJ!Ct~3{AfJz1poxqI)%@$ z^;{N~bKmWhIoECXDAbR1Kfn3XoA2W=PIWzxL?p}UC_FbEo4JOF5FE$BbLYdwu%)z2 z5BV|NK0WtebH-oQXD^U2%t->3w@y~oVMWkj(^(x7+p&#^E)88WV;!^VsTTARQ_EKu ze?TFiwas@^02fGHkxri}nx?MWF16%YsESGB%aoi$)K8+t_(2VgRA@1BpQ#tF%P|MZ zaTIlE>V%3m0XV>k&_Q<#(EQ&9KJqP*{4mWzXG?q+`!H$J4B8Eag~^ zd($Rzdg57fJHH51v3IY*`Wiq#d6nzC*cvv&0_&CJ-lt51Lg>_1MuOEd;nS`^+2*;7 zxf^Oi>nco1Z6u|h%mb`kud}wPuo#q;Rm8?CHbeA!)y+>gxtrHewFFM1<1U>=V^0@h z+@dCwsG6E@x=Gsd^YfefCTl$L>*f23Ls3?1XlF8KoBU*$xw_{fDMWVidog9(+TCEa zZ1n%|0B9(`aao7HF!}bzvuxsLYWi!D?pIi)P3Gdo_FNWz)l`Tu{pIYJGZX10$vB)e z4=Q@tguSu>r#`p`SJEY0wXK57@X2wb=>#L!*+A*L>nb9(?$_C)b4wIw8#qe=?;}q1 z?$IP#U%)1PW>oJzx1M>U)6mc5PwZ#K-1-;PK{e=?9{XE0n!Hth1b;|{y+R5O&_3P4JEP93DERVW-3g-8hGt5(pBt< z|D<|@>k~3Cs&jII28KsvUkqCNzIIjee3@Ofn-#>h0$sqPlRNJp%96C=GM%HT!(OUk z9oj2`=Wd*96&PttnGbsCEhhHO@R7*{@%n82nQgK{W4EeWYke1SoaCVcF}@~$;Tdi& zpV~%o$UJl4PY?g9S^D;NZHMRY>i|7+#b5sg?4S)@god}vT~9PxBm#;ct5Zdt9KA-R3PWz2X$hbBnUv9y;2asQUT8-xQD)W6A#A&?xu5m~GdII7-Aa8GiW=NaF_A z3r_<+*moeJ^dn574G6nbfZ%VwqL_(P(3we!Rs}2-`Q)P zdHaiQwugd<9AD9Bhx61*H128MJFa*6WWn_v$ov%nw`n@$ZSqTuxIdIsS_eLeodyN)b%oz^sc#-dmKR@^;jXfvdy7 z)zN~;+#8<(VZ}zB!rcD^!(=KVMNqD@-vJ9Jv9q`S_~*6V;DUUbcB_;-o_*RTSm-g!uk-zQ+Y4M;YW4X4ABJb}XLp4PVdj2G&h za=40M-2d;@Oey%E94n^ujr@o5Hx$n+ZY!e%QDx39so}njEop|f@d%|ejbG|E=^=5+ z^Lb+b^`9<3w6siF;jBOXIP^?t$>~%4dmp(X&2wv)QoI}QZt^_6=I;hN6^cH&#z_VA r=1B<%dln?qC}CHq5uB_O!u?T diff --git a/integration_tests/project.json b/integration_tests/project.json deleted file mode 100644 index d0d56c27e..000000000 --- a/integration_tests/project.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "integration_tests", - "projectType": "e2e", - "projectRoot": "integration_tests", - "implicitDependencies": ["cron", "evm"], - "tags": [], - "targets": { - "lint": { - "executor": "nx:run-commands", - "options": { - "cwd": "{projectRoot}", - "command": "golangci-lint run ./..." - } - }, - "test": { - "executor": "nx:run-commands", - "options": { - "cwd": "{projectRoot}", - "command": "go test ./..." - } - }, - "tidy": { - "executor": "nx:run-commands", - "options": { - "cwd": "{projectRoot}", - "command": "go mod tidy" - } - } - } -} diff --git a/integration_tests/scripts/killAllZombieTestProcesses.sh b/integration_tests/scripts/killAllZombieTestProcesses.sh deleted file mode 100755 index ad1d64fac..000000000 --- a/integration_tests/scripts/killAllZombieTestProcesses.sh +++ /dev/null @@ -1 +0,0 @@ -ps aux | grep "integration_tests_temp" | grep -v grep | awk '{print $2}' | xargs kill -9 diff --git a/integration_tests/utils/cron.go b/integration_tests/utils/cron.go deleted file mode 100644 index a67a1eb5d..000000000 --- a/integration_tests/utils/cron.go +++ /dev/null @@ -1,22 +0,0 @@ -package utils - -import ( - "encoding/json" - "testing" -) - -type CronConfig struct { - FastestScheduleIntervalSeconds int `json:"fastestScheduleIntervalSeconds"` -} - -func GetCronConfig(t *testing.T, fastestIntervalSeconds int) string { - config := CronConfig{ - FastestScheduleIntervalSeconds: fastestIntervalSeconds, - } - - jsonConfig, err := json.Marshal(config) - if err != nil { - t.Fatalf("failed to marshal config: %v", err) - } - return "'" + string(jsonConfig) + "'" -} diff --git a/integration_tests/utils/deploy.go b/integration_tests/utils/deploy.go deleted file mode 100644 index 1dff056d7..000000000 --- a/integration_tests/utils/deploy.go +++ /dev/null @@ -1,39 +0,0 @@ -package utils - -import ( - "os" - "os/exec" - "path/filepath" - "testing" - - "github.com/stretchr/testify/require" - - "github.com/smartcontractkit/chainlink-common/pkg/logger" -) - -const CapabilitiesDir = "integration_tests_temp" - -// DeployCapability builds the capability returns the path to the binary -func DeployCapability(t *testing.T, capabilityName string) (string, error) { - projectPath := "../../" + capabilityName - outputBinary := CapabilitiesDir + "/" + capabilityName - absoluteBinaryPath, err := filepath.Abs(outputBinary) - require.NoError(t, err) - - cmd := exec.Command("go", "build", "-gcflags", "all=-N -l", "-o", absoluteBinaryPath) - cmd.Dir = projectPath - output, err := cmd.CombinedOutput() - require.NoError(t, err, string(output)) - - require.NoError(t, err) - - return absoluteBinaryPath, nil -} - -// CleanupCapabilitiesDir removes any capabilities built by the test -func CleanupCapabilitiesDir(lggr logger.Logger) { - err := os.RemoveAll(CapabilitiesDir) - if err != nil { - lggr.Errorf("Failed to remove directory: %v", err) - } -} diff --git a/integration_tests/utils/fetcher.go b/integration_tests/utils/fetcher.go deleted file mode 100644 index 3d530dbbe..000000000 --- a/integration_tests/utils/fetcher.go +++ /dev/null @@ -1,19 +0,0 @@ -package utils - -import ( - "context" - "fmt" - - "github.com/smartcontractkit/chainlink-common/pkg/custmsg" - commonlogger "github.com/smartcontractkit/chainlink-common/pkg/logger" - "github.com/smartcontractkit/chainlink-common/pkg/workflows/wasm/host" - "github.com/smartcontractkit/chainlink/v2/core/capabilities/compute" -) - -type NoopComputeFetcherFactory struct{} - -func (n NoopComputeFetcherFactory) NewFetcher(log commonlogger.Logger, emitter custmsg.MessageEmitter) compute.FetcherFn { - return func(ctx context.Context, req *host.FetchRequest) (*host.FetchResponse, error) { - return nil, fmt.Errorf("no fetcher configured") - } -} diff --git a/integration_tests/utils/wasm.go b/integration_tests/utils/wasm.go deleted file mode 100644 index 85037114c..000000000 --- a/integration_tests/utils/wasm.go +++ /dev/null @@ -1,36 +0,0 @@ -package utils - -import ( - "bytes" - "encoding/base64" - "os" - "os/exec" - "testing" - - "github.com/andybalholm/brotli" - "github.com/stretchr/testify/require" -) - -// GetCompressedWorkflowWasm compresses the workflow wasm file using brotli and returns the compressed binary and the base64 encoded compressed binary -func GetCompressedWorkflowWasm(t *testing.T, workflowWasmPath string) ([]byte, string) { - uncompressedBinary, err := os.ReadFile(workflowWasmPath) - require.NoError(t, err) - - var compressedBuffer bytes.Buffer - writer := brotli.NewWriter(&compressedBuffer) - _, err = writer.Write(uncompressedBinary) - require.NoError(t, err) - err = writer.Close() - require.NoError(t, err) - compressedBinary := compressedBuffer.Bytes() - base64EncodedCompressedBinary := base64.StdEncoding.EncodeToString(compressedBinary) - return compressedBinary, base64EncodedCompressedBinary -} - -func CreateWasmBinary(t *testing.T, goFile string, wasmFile string) { - cmd := exec.Command("go", "build", "-o", wasmFile, goFile) // #nosec - cmd.Env = append(os.Environ(), "GOOS=wasip1", "GOARCH=wasm") - - output, err := cmd.CombinedOutput() - require.NoError(t, err, string(output)) -} diff --git a/sonar-project.properties b/sonar-project.properties index 8f1432092..e3c3bda8e 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -30,7 +30,6 @@ sonar.exclusions=\ sonar.coverage.exclusions=\ **/test/**/*,\ **/fuzz/**/*,\ -**/integration_tests/**/*,\ **/*test/**/*,\ **/*_test.go,\ **/main.go, \ @@ -45,7 +44,6 @@ libs/protos/*, \ # We should not need to deduplicate workflows/**/main.go files sonar.cpd.exclusions=\ **/workflows/**/main.go,\ -**/integration_tests/**/* # Tests' root folder, inclusions (tests to check and count) and exclusions sonar.tests=.